Dans le programme suivant, pourquoi frapper la une touche d'impression « bonjour, monde » tout en frappant CTRL +un ne fonctionne pas?Java Swing KeyStrokes: comment rendre le travail modificateur CTRL
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);
}
}
Comment pourrais-je réparer que CTRL +un fonctionne aussi bien?
Mec, merci! Votre solution fonctionne, mais je me demande encore pourquoi la mienne ne ... – Thomas
Intéressant J'ai fait ma suggestion avant cette publication, et je vous ai donné d'autres alternatives que vous pourriez utiliser dans différentes situations. Je suppose que je ne vais pas aller à tous les ennuis la prochaine fois. – camickr
@Thomas: Je ne sais pas si j'ai raison, mais la raison pour laquelle votre code n'a peut-être pas fonctionné car dans le premier cas, vous faisiez référence à un simple caractère 'a'. Dans le second cas, vous faites référence à une combinaison de touches ASCII et une valeur de balayage (touche Ctrl). Je pense qu'il aurait dû être associé aux événements correctement. – bragboy