Heim > Java > javaLernprogramm > Hauptteil

Warum funktionieren meine KeyListener nicht in meinem JPanel?

Linda Hamilton
Freigeben: 2024-10-28 07:32:02
Original
400 Leute haben es durchsucht

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 lösen nicht die gewünschten Aktionen aus. Dieses Problem kann aus mehreren Faktoren entstehen.

Einschränkungen der fokussierten Komponente

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:

<code class="java">public JPanel extends JPanel implements KeyListener {

    public JPanel() {
        this.addKeyListener(this);
        this.setFocusable(true);
        this.requestFocusInWindow();
    }</code>
Nach dem Login kopieren

Alternative: Tastenkombinationen

Während das manuelle Festlegen des Fokus a Für eine praktikable Lösung 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:

<code class="java">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");
        }
    }
}</code>
Nach dem Login kopieren

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). .

Das obige ist der detaillierte Inhalt vonWarum funktionieren meine KeyListener nicht in meinem JPanel?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!