Maison > Java > javaDidacticiel > Pourquoi utiliser des liaisons de touches plutôt que des écouteurs de touches pour une réactivité améliorée des applications ?

Pourquoi utiliser des liaisons de touches plutôt que des écouteurs de touches pour une réactivité améliorée des applications ?

Mary-Kate Olsen
Libérer: 2024-12-19 03:50:09
original
879 Les gens l'ont consulté

Why Use Key Bindings Instead of Key Listeners for Enhanced Responsiveness in Applications?

Comment utiliser les liaisons de touches comme alternatives aux auditeurs de clés

Au lieu de compter sur les KeyListeners pour permettre aux objets à l'écran de répondre à la clé de l'utilisateur saisie, envisagez d'exploiter les raccourcis clavier pour une réactivité améliorée.

Les raccourcis clavier offrent plusieurs avantages par rapport KeyListeners :

Éliminez le besoin de concentration :
Contrairement aux KeyListeners, les raccourcis clavier permettent aux objets de répondre aux entrées, qu'ils aient ou non le focus. Cela élimine le comportement inattendu où les utilisateurs doivent cliquer sur un objet pour déclencher sa fonctionnalité.

Maintenance et flexibilité facilitées :
Les raccourcis clavier simplifient la gestion et la personnalisation des actions de saisie utilisateur. Relier, désactiver ou attribuer de nouvelles actions aux touches devient facile, améliorant ainsi la lisibilité et la maintenabilité du code.

Fonctionnement des liaisons de touches :
Les liaisons de touches comprennent deux composants : un InputMap et un ActionMap. . L'InputMap associe les entrées utilisateur (comme les pressions sur des touches) aux noms d'action. L'ActionMap relie ensuite les noms d'action à des actions spécifiques. Lorsqu'un utilisateur appuie sur une touche, l'InputMap identifie le nom de l'action correspondante et l'ActionMap exécute l'action appropriée.

Implémentation des liaisons de touches :
Pour implémenter les liaisons de touches, mappez les entrées de l'utilisateur aux actions en utilisant la syntaxe suivante :

myComponent.getInputMap().put("userInput", "myAction");
myComponent.getActionMap().put("myAction", action);
Copier après la connexion

Exemple Code :
Voici une version révisée du code fourni dans la question d'origine, utilisant des raccourcis clavier :

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

public class MyGame extends JFrame {

    private static final int IFW = JComponent.WHEN_IN_FOCUSED_WINDOW;
    private static final String MOVE_UP = "move up";
    private static final String MOVE_DOWN = "move down";
    private static final String FIRE = "move fire";

    static JLabel obj1 = new JLabel();
    static JLabel obj2 = new JLabel();

    public MyGame() {

        // ... GUI layout and management ...

        obj1.getInputMap(IFW).put(KeyStroke.getKeyStroke("UP"), MOVE_UP);
        obj1.getInputMap(IFW).put(KeyStroke.getKeyStroke("DOWN"), MOVE_DOWN);
        obj1.getInputMap(IFW).put(KeyStroke.getKeyStroke("control CONTROL"), FIRE);
        obj2.getInputMap(IFW).put(KeyStroke.getKeyStroke("W"), MOVE_UP);
        obj2.getInputMap(IFW).put(KeyStroke.getKeyStroke("S"), MOVE_DOWN);
        obj2.getInputMap(IFW).put(KeyStroke.getKeyStroke("T"), 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));
        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));

        // ... Remaining GUI setup ...
    }

    static void rebindKey(KeyEvent ke, String oldKey) {

        // ... Handle key rebinding ...
    }

    public static void main(String[] args) {

        new MyGame();
    }

    private class MoveAction extends AbstractAction {

        // ... Action details ...
    }

    private class FireAction extends AbstractAction {

        // ... Action details ...
    }
}
Copier après la connexion

En séparant l'InputMap de l'ActionMap, vous améliorez la réutilisabilité du code et obtenez un contrôle plus précis. sur les raccourcis clavier. De plus, les actions peuvent être activées ou désactivées indépendamment, offrant une plus grande flexibilité.

N'hésitez pas à affiner davantage le code en fonction de vos besoins spécifiques et des objectifs du projet.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal