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