Bei dem Versuch, einen KeyListener für einen JFrame zu implementieren, stieß ein Entwickler auf ein rätselhaftes Problem: Der KeyListener schien nicht zu reagieren , ohne dass beim Drücken von Tasten Meldungen in der Konsole angezeigt werden. Der Entwickler vermutete einen mangelnden Fokus auf den JFrame und suchte Hilfe.
Bei sorgfältiger Prüfung stellte sich heraus, dass der KeyListener tatsächlich korrekt hinzugefügt wurde und der Fokus richtig gesetzt war. Es fehlte jedoch ein entscheidendes Element: ein Mechanismus zur Weitergabe der Schlüsselereignisse an den KeyListener.
Die Lösung liegt in der Verwendung eines KeyEventDispatcher. Dieser Dispatcher kann als innere Klasse innerhalb des JFrame definiert und dem KeyboardFocusManager hinzugefügt werden. Die Methode „dispatchKeyEvent“ des Dispatchers verarbeitet alle Schlüsselereignisse, einschließlich keyPressed, keyReleased und keyTyped. Durch die Implementierung dieses Mechanismus kann der KeyListener wichtige Ereignisse effektiv erfassen und darauf reagieren.
Unten finden Sie ein modifiziertes Codebeispiel, das den KeyEventDispatcher enthält:
public class MyFrame extends JFrame { private class MyDispatcher implements KeyEventDispatcher { @Override public boolean dispatchKeyEvent(KeyEvent e) { if (e.getID() == KeyEvent.KEY_PRESSED) { System.out.println("tester"); } else if (e.getID() == KeyEvent.KEY_RELEASED) { System.out.println("2test2"); } else if (e.getID() == KeyEvent.KEY_TYPED) { System.out.println("3test3"); } return false; } } public MyFrame() { add(new JTextField()); System.out.println("test"); KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager(); manager.addKeyEventDispatcher(new MyDispatcher()); } public static void main(String[] args) { MyFrame f = new MyFrame(); f.pack(); f.setVisible(true); } }
Mit dieser Änderung wird der KeyListener dies jetzt tun Schlüsselereignisse erfolgreich empfangen und verarbeiten und die erwartete Ausgabe in der Konsole bereitstellen.
Das obige ist der detaillierte Inhalt vonWarum reagiert der KeyListener meines JFrames nicht auf Tastendrücke?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!