suchen
HeimJavajavaLernprogrammUmgang mit Java-Swing-Schlüsseln: Tastenzuordnungen oder Schlüssel-Listener – was sollten Sie wählen?

Java Swing Key Handling: Key Bindings or Key Listeners – Which Should You Choose?

Tastenkombinationen vs. Schlüssel-Listener in Java Swing: Ein umfassender Leitfaden

Tastenkombinationen und Schlüssel-Listener sind zwei Ansätze zum Umgang mit Benutzereingabeereignissen von Schlüsseln in Java Swing-Anwendungen. Während Tastenlistener eine einfache Möglichkeit bieten, Tastendrücke zu erkennen, bieten Tastenkombinationen mehrere Vorteile, darunter:

  • Verbesserte Reaktionsfähigkeit: Tastenkombinationen erfordern nicht, dass der Benutzer auf ein Objekt klickt um ihm den Fokus zu geben, was zu einer schnelleren und intuitiveren Eingabeverarbeitung führt.
  • Verbesserte Wartbarkeit:Tastenkombinationen ermöglichen zum einfacheren Deaktivieren, erneuten Zuweisen und Neuzuweisen von Benutzeraktionen, wodurch die Wartung und die Lesbarkeit des Codes vereinfacht werden.

Tastenkombinationen verstehen

Tastenkombinationen umfassen zwei Objekte:

  • InputMap: Ordnet Benutzereingaben einer Aktion zu Name.
  • ActionMap: Ordnet einen Aktionsnamen einer Aktion zu.

Wenn eine Taste gedrückt wird, sucht die Eingabezuordnung nach der Taste und findet eine Aktion Name. Anschließend wird die Aktionskarte nach dem Aktionsnamen durchsucht und die Aktion ausgeführt.

Tastenzuordnungen implementieren

Um eine einzelne Tastenzuordnung zu erstellen, verwenden Sie die folgende Struktur:

myComponent.getInputMap().put("userInput", "myAction");
myComponent.getActionMap().put("myAction", action);

Verwenden von WHEN_IN_FOCUSED_WINDOW InputMap

Die InputMap für WHEN_IN_FOCUSED_WINDOW ermöglicht es mehreren Komponenten innerhalb eines fokussierten Fensters, gleichzeitig Eingaben zu empfangen. Wenn Sie beispielsweise mehrere Tanks in einem fokussierten Fenster haben und möchten, dass diese Eingaben empfangen, verwenden Sie die folgende Struktur:

tank1.getInputMap(IFW).put(KeyStroke.getKeyStroke("W"), "move up");
tank2.getInputMap(IFW).put(KeyStroke.getKeyStroke("S"), "move down");
// ...
tankN.getInputMap(IFW).put(KeyStroke.getKeyStroke("T"), "fire");

Tasten neu binden

Um einen erneut zu binden Schlüssel mithilfe eines KeyListener:

obj1.getInputMap(IFW).remove(KeyStroke.getKeyStroke(oldKey));
// ...
obj1.getInputMap(IFW).put(KeyStroke.getKeyStrokeForEvent(ke),
                 obj1.getInputMap(IFW).get(KeyStroke.getKeyStroke(oldKey)));

Code Beispiel

Hier ist ein Codebeispiel, das Tastenkombinationen demonstriert:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class MyGame extends JFrame {

    public MyGame() {
        // Do layout management, create objects, etc.
        JLabel obj1 = new JLabel();
        JLabel obj2 = new JLabel();

        // Set key bindings for object 1
        obj1.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("UP"), "move up");
        obj1.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("DOWN"), "move down");
        obj1.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("control CONTROL"), "fire");
        obj1.getActionMap().put("move up", new MoveAction(1, 1));
        obj1.getActionMap().put("move down", new MoveAction(2, 1));
        obj1.getActionMap().put("fire", new FireAction(1));

        // Set key bindings for object 2
        obj2.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("W"), "move up");
        obj2.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("S"), "move down");
        obj2.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("T"), "fire");
        obj2.getActionMap().put("move up", new MoveAction(1, 2));
        obj2.getActionMap().put("move down", new MoveAction(2, 2));
        obj2.getActionMap().put("fire", new FireAction(2));

        // Add objects to the JFrame
        add(obj1);
        add(obj2);
    }

    // Handle key rebinding
    public static void rebindKey(KeyEvent ke, String oldKey) {
        // Find and replace key binding
    }

    // Main method
    public static void main(String[] args) {
        new MyGame();
    }

    // Inner class for move action
    private class MoveAction extends AbstractAction {

        int direction;
        int player;

        MoveAction(int direction, int player) {
            this.direction = direction;
            this.player = player;
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            // Implement move logic
        }
    }

    // Inner class for fire action
    private class FireAction extends AbstractAction {

        int player;

        FireAction(int player) {
            this.player = player;
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            // Implement fire logic
        }
    }
}

Fazit

Tastenkombinationen bieten eine leistungsstarke und flexible Möglichkeit Behandeln Sie Benutzereingabeereignisse in Java Swing-Anwendungen. Durch die Nutzung von Tastenkombinationen können Entwickler die Reaktionsfähigkeit, Wartbarkeit und Wiederverwendbarkeit ihrer Anwendungen verbessern.

Das obige ist der detaillierte Inhalt vonUmgang mit Java-Swing-Schlüsseln: Tastenzuordnungen oder Schlüssel-Listener – was sollten Sie wählen?. 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
Wie benutze ich @ResultType Annotation in MyBatis richtig?Wie benutze ich @ResultType Annotation in MyBatis richtig?Apr 19, 2025 pm 04:12 PM

Beim Studium des MyBatis -Frameworks stoßen Entwickler häufig auf verschiedene Probleme in Bezug auf Anmerkungen. Eine der häufigsten Fragen ist, wie die @ResultType -Annotation richtig verwendet wird ...

Wie nutze ich Technologie für natürliche Sprachverarbeitung, um Personaldaten effizient abzufragen?Wie nutze ich Technologie für natürliche Sprachverarbeitung, um Personaldaten effizient abzufragen?Apr 19, 2025 pm 04:09 PM

Methoden zur Verwendung von Technologie zur Verarbeitung natürlicher Sprache, um Personaldaten in modernen Unternehmen abzufragen, ist die Verwaltung und Abfrage von Personaldaten eine häufigste Anforderung. Angenommen, wir ...

Was ist der Grund, warum der Datenbankzugriff tagsüber und während der Nacht langsam und schnell ist?Was ist der Grund, warum der Datenbankzugriff tagsüber und während der Nacht langsam und schnell ist?Apr 19, 2025 pm 04:06 PM

Datenbankzugriffsleistungsproblem im Springboot-Projekt Multi-Daten-Quellkonfiguration Dieser Artikel zielt darauf ab, Atomikos für die Konfiguration von Multi-Data-Quellen in einem Springboot-Projekt zu verwenden ...

NoclassDeffoundError erscheint, nachdem das Java -Projekt in JAR verpackt ist: Wie kann JDK -Version Kompatibilitätsprobleme beheben?NoclassDeffoundError erscheint, nachdem das Java -Projekt in JAR verpackt ist: Wie kann JDK -Version Kompatibilitätsprobleme beheben?Apr 19, 2025 pm 04:03 PM

Beim Verpacken eines Java -Projekts in eine ausführbare JAR -Datei stößt es auf das Problem von NoclassDeffoundError. Viele Java -Entwickler können ...

Wie kann man den Cracking -Prozess der Intellij -Idee analysieren und die LIB oder die Klasse für die Registrierung verantwortlich finden?Wie kann man den Cracking -Prozess der Intellij -Idee analysieren und die LIB oder die Klasse für die Registrierung verantwortlich finden?Apr 19, 2025 pm 04:00 PM

In Bezug auf die Analysemethode des Intellijidea Cracks in der Programmierwelt, Intellij ...

Wie verbessern Sie die Videoqualität mit Java und Javacv? Warum sind die Effekte begrenzt?Wie verbessern Sie die Videoqualität mit Java und Javacv? Warum sind die Effekte begrenzt?Apr 19, 2025 pm 03:57 PM

Problemeinführung: Eine verbesserte Videoqualität ist ein wichtiger Bestandteil der Videoverarbeitung, insbesondere bei der Verarbeitung von Videos mit niedriger Definition, der Verwendung von Java-Sprache und ...

Wie bekomme ich die @RequestBody-Annotation im Springboot, um die String-Parameter im Nicht-JSON-Format korrekt zu empfangen?Wie bekomme ich die @RequestBody-Annotation im Springboot, um die String-Parameter im Nicht-JSON-Format korrekt zu empfangen?Apr 19, 2025 pm 03:54 PM

Bei der Behandlung von Springboot -Anwendungen stoßen wir häufig auf das Problem, wie Anforderungsparameter korrekt empfangen werden. Vor allem, wenn das Parameterformat kein gemeinsamer JSON ist, mehr ...

Welche Auswirkungen wird das statische Schlüsselwort bei der Erklärung von Concurrenthashmap in Java hinzugefügt?Welche Auswirkungen wird das statische Schlüsselwort bei der Erklärung von Concurrenthashmap in Java hinzugefügt?Apr 19, 2025 pm 03:51 PM

Die Auswirkungen der Hinzufügen von statischer Erklärung bei der Erklärung von Concurrenthashmap in Java in Java -Programmierung, Concurrenthashmap ...

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

PHPStorm Mac-Version

PHPStorm Mac-Version

Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

EditPlus chinesische Crack-Version

EditPlus chinesische Crack-Version

Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software