„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum funktionieren meine KeyListener nicht in meinem JPanel?

Warum funktionieren meine KeyListener nicht in meinem JPanel?

Veröffentlicht am 08.11.2024
Durchsuche:808

Why Aren\'t My KeyListeners Working in My JPanel?

KeyListener reagieren nicht in JPanel: Ein häufiges Problem

Bei der Verwendung von KeyListeners zum Erkennen von Tastenanschlägen in einem JPanel stoßen Entwickler häufig auf das Problem, dass die Zuhörer können die gewünschten Aktionen nicht auslösen. Dieses Problem kann aus mehreren Faktoren entstehen.

Fokussierte Komponenteneinschränkungen

KeyListener sind darauf angewiesen, dass sie sich an die fokussierte Komponente anhängen, um ordnungsgemäß zu funktionieren. Standardmäßig wird einem JPanel der Fokus nicht automatisch gewährt. Um dieses Problem zu beheben, legen Sie die Fokussierbarkeit explizit fest und fordern Sie den Fokus innerhalb des JPanel-Konstruktors an:

public JPanel extends JPanel implements KeyListener {

    public JPanel() {
        this.addKeyListener(this);
        this.setFocusable(true);
        this.requestFocusInWindow();
    }

Alternative: Tastenkombinationen

Während das manuelle Festlegen des Fokus eine praktikable Lösung ist, ist die Verwendung von Tastenkombinationen ein robusterer Ansatz. Tastenkombinationen bieten einen flexiblen Mechanismus zum Zuordnen von Tastenanschlägen zu bestimmten Aktionen. So implementieren Sie Tastenkombinationen in einem JPanel:

public JPanel extends JPanel implements ActionListener {

    public JPanel() {
        setupKeyBinding();
        this.setFocusable(true);
        this.requestFocusInWindow();
    }

    private void setupKeyBinding() {
        int condition = JComponent.WHEN_IN_FOCUSED_WINDOW;
        InputMap inMap = getInputMap(condition);
        ActionMap actMap = getActionMap();

        inMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0), "Left");
        actMap.put("Left", new leftAction());
    }

    private class leftAction extends AbstractAction {

        public void actionPerformed(ActionEvent e) {
            System.out.println("test");
        }
    }
}

In diesem Beispiel definiert die leftAction-Klasse die Aktion, die ausgeführt werden soll, wenn die linke Pfeiltaste gedrückt wird (in diesem Fall das Drucken von „test“ auf der Konsole).

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3