Heim >Java >javaLernprogramm >Warum reagiert der KeyListener meines JFrames nicht auf Tastendrücke?

Warum reagiert der KeyListener meines JFrames nicht auf Tastendrücke?

Susan Sarandon
Susan SarandonOriginal
2024-11-13 03:17:021077Durchsuche

Why is my JFrame's KeyListener not responding to key presses?

Nicht reagierender KeyListener für JFrame: Ein gelöstes Rätsel

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn