Jak otrzymać wartość char z przytrzymanego przycisku?

0

Witam.
Mam oto taki kod.
Działa on w sposób, że zmienia tytuł okna jeżeli wprowadzimy z klawiatury poprawnie słowo "secret"

Moim zadaniem jest tak go zmodyfikować aby działał w identyczny sposób lecz bez użycia metody keyReleased();

Mimo prób i poszukiwań w internecie nie udało mi się rozwiązać tego problemu.

Kiedy używamy metody keyReleased() pomimo przytrzymania przypisze wartość dla

 char c 

Jednak w metodzie keyPressed() już tak się nie da. Jak w takim razie zmodyfikować kod, aby pomimo przytrzymania klawisza zapisywał wartość w zmiennej c?

*Mam nadzieję, że zrozumiecie o co mi chodzi. Późna godzina i zdania dziwnie się klecą. :/


import java.awt.Dimension;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;

public class KeyTest extends JFrame implements KeyListener {

    private int counter = 0;
    private String userInput = "";
    private final String secret = "secret";

    public KeyTest() {
        super("KeyListener Test");
        setPreferredSize(new Dimension(300, 100));
        addKeyListener(this);

        pack();
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    @Override
    public void keyPressed(KeyEvent evt  ) {
    }

    @Override
    public void keyReleased(KeyEvent evt) {
        char c = evt.getKeyChar();      
        if(counter < secret.length())
            checkSecret(c);
    }

    @Override
    public void keyTyped(KeyEvent evt) {

    }

    private void checkSecret(char c) {
        if(c == secret.charAt(counter)) {
            counter++;
            userInput = userInput+c;
        }
        else {
            counter = 0;
            userInput = "";
        }

        if(userInput.equals(secret))
            setTitle("Sekretne hasło");
    }
}
2

Fragment dokumentacji:

public char getKeyChar()

Returns the character associated with the key in this event. For example, the KEY_TYPED event for shift + "a" returns the value for "A".

KEY_PRESSED and KEY_RELEASED events are not intended for reporting of character input. Therefore, the values returned by this method are guaranteed to be meaningful only for KEY_TYPED events.

Edit Powinieneś użyć metody keyTyped. Sprawdziłem u siebie (XP SP3, Java 7), działa każda metoda.

0

Hmm. Faktycznie. :D
Dziwne, nie brałem tego pod uwagę bo jak sprawdzałem tą metodę to nie zadziałała.

A teraz już z czystej ciekawości.
Można to samo wykminić z KeyPressed? Są jak

0

Przeczytałeś mój post? Na 100% zadziała tylko dla keyTyped. Dla pozostałych dwóch metod nie ma gwarancji, że zadziała. Na moim komputerze (XP SP3, Java 7) każda metoda jest odpowiednia.

0

Ok, ok. Czaję.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0