Heim >Java >javaLernprogramm >Warum reagiert der KeyListener meines JFrames nicht?

Warum reagiert der KeyListener meines JFrames nicht?

Barbara Streisand
Barbara StreisandOriginal
2024-11-13 13:25:02514Durchsuche

Why Isn't My JFrame's KeyListener Responding?

Nicht reagierender KeyListener für JFrame: Tastaturinteraktivität freischalten

Bei Ihrem Versuch, einen KeyListener für Ihren JFrame zu implementieren, sind Sie auf ein verwirrendes Problem gestoßen, bei dem der KeyListener schien trotz ordnungsgemäßer Registrierung nicht zu reagieren.

Der Fokus-Rätsel

Ihr anfänglicher Verdacht, dass der Fokus nicht auf dem JFrame lag, ist ein weit verbreitetes Missverständnis. Standardmäßig hat der JFrame den Fokus, wenn er sichtbar wird. Es lohnt sich jedoch, dies noch einmal zu überprüfen, indem Sie requestFocus() auf dem JFrame aufrufen.

Einführung des KeyEventDispatcher

Wenn der Fokus nicht der Übeltäter ist, sollten Sie die Verwendung eines KeyEventDispatcher in Betracht ziehen. Mit diesem leistungsstarken Mechanismus können Sie wichtige Ereignisse erfassen, unabhängig davon, welche Komponente den Fokus hat.

Beispielcode

Der folgende Codeausschnitt zeigt, wie Sie Ihrem JFrame einen KeyEventDispatcher hinzufügen:

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 diesem erweiterten Code können Sie jetzt wichtige Ereignisse erfassen und die gewünschten Aktionen ausführen, wodurch das anfängliche Problem eines Problems effektiv gelöst wird nicht reagierender KeyListener.

Das obige ist der detaillierte Inhalt vonWarum reagiert der KeyListener meines JFrames nicht?. 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