10
votes

Java Swing Keystrokes: Comment faire du travail Ctrl-Modifier

Dans le programme suivant, pourquoi frappe la touche A KBD> Imprimer "Hello, World" em> tout en frappant Ctrl kbd> + A ne pas?

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

public class KeyStrokeTest {
    public static void main(String[] args) {
        JPanel panel = new JPanel();

        /* add a new action named "foo" to the panel's action map */
        panel.getActionMap().put("foo", new AbstractAction() {
                public void actionPerformed(ActionEvent e) {
                    System.out.println("hello, world");
                }
            });

        /* connect two keystrokes with the newly created "foo" action:
           - a
           - CTRL-a
        */
        InputMap inputMap = panel.getInputMap();
        inputMap.put(KeyStroke.getKeyStroke(Character.valueOf('a'), 0), "foo");
        inputMap.put(KeyStroke.getKeyStroke(Character.valueOf('a'), InputEvent.CTRL_DOWN_MASK), "foo");

        /* display the panel in a frame */
        JFrame frame = new JFrame();
        frame.getContentPane().add(panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 400);
        frame.setVisible(true);
    }
}


0 commentaires

3 Réponses :


20
votes

Je trouve plus facile à utiliser: xxx

ou: xxx


0 commentaires

7
votes

mec, utilisez ce xxx


3 commentaires

Intéressant, j'ai fait ma suggestion avant cette publication, plus je vous ai donné d'autres alternatives que vous pourriez être en mesure d'utiliser dans différentes situations. Je suppose que je n'irai pas à tous les ennuis la prochaine fois.


@THOMAS: Je ne sais pas si je suis correct, mais la raison pour laquelle votre code n'aurait peut-être pas travaillé car dans le premier cas, vous faisiez référence à un caractère simple 'A'. Où dans le second cas, vous vous référez à une combinaison de clés qui est une valeur ASCII et une valeur de numérisation (clé Ctrl). Je pense que cela aurait dû être associé à des événements correctement.


@camickr - Je suis désolé, c'était une erreur honnête.



0
votes

YEP, le code ci-dessus fonctionnera.

Big Picture - Ctrl + A et A est lu comme des touches différentes de la même manière que A et B serait différent.


1 commentaires

L'OP sait "Ctrl-A" et "A" sont des coups de frappe différents.