Za prvé, pokud jste ještě neobjevil příkaz
switch, do nízkoúrovňového programování bych se být vámi nepouštěl.
Za druhé, vůbec nepíšete, jakým způsobem klávesy zachytáváte. Na úrovni operačního systému je to tak, že se detekuje stisknutí a uvolnění klávesy, a posílá se kód konkrétní klávesy. O úroveň výš se pak dělá mapování na znaky – takže třeba kombinace dvou kláves se přemapuje na jeden znak, řeší se opakování znaku při držení klávesy atd. Nad tímhle vším pak je ještě Java, která to zase zevšeobecňuje pro multiplatformní programy. Takže je otázka, co všechno je v Javě dostupné.
Za třetí, když si přečtete JavaDoc (bez toho se vůbec nepouštějte do programování v Javě), dočtete se tam, že máte zpřístupněné ty výše zmíněné dvě úrovně.
KeyCode se posílá jen při stisknutí a uvolnění klávesy (nižší úroveň zpracování), při události
keyTyped už je nastaven na nulu (protože došlo k mapování na znaky a znak je často výsledkem stisku více kláves). A přesně takhle mi to také funguje. Můžete si to sám vyzkoušet:
public class KeyEventTest extends JFrame implements KeyListener {
@Override
public void keyTyped(KeyEvent event) {
printEvent("Typed", event);
}
@Override
public void keyPressed(KeyEvent event) {
printEvent("Pressed", event);
}
@Override
public void keyReleased(KeyEvent event) {
printEvent("Released", event);
}
private void printEvent(String eventName, KeyEvent event) {
System.out.println(String.format("%s: %c %d %d", eventName, event.getKeyChar(), event.getKeyCode(), event.getKeyLocation()));
}
public static void main(String[] args) {
new KeyEventTest().setVisible(true);
}
public KeyEventTest() throws HeadlessException {
super("KeyEvent");
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setMinimumSize(new Dimension(200, 200));
addKeyListener(this);
}
}