Im folgende Programm zu machen, warum trifft den einen Taste Druck „Hallo, Welt“ während Schlagen CTRL +ein nicht?Java Swing KeyStrokes: wie CTRL-Modifikator Arbeit
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);
}
}
Wie kann ich das Problem beheben, dass CTRL +ein auch funktioniert?
Alter, danke! Ihre Lösung funktioniert, aber ich frage mich immer noch, warum meins nicht ... – Thomas
Interessant Ich habe meinen Vorschlag vor diesem Posting gemacht, und ich habe Ihnen andere Alternativen gegeben, die Sie möglicherweise in verschiedenen Situationen verwenden können. Ich schätze, ich werde das nächste Mal nicht alle Probleme machen. – camickr
@Thomas: Ich weiß nicht, ob ich richtig bin, aber der Grund, dass Ihr Code nicht funktioniert haben könnte, weil Sie im ersten Fall auf ein einfaches Zeichen "a" bezogen haben. Where-in im zweiten Fall beziehen Sie sich auf eine Kombination von Schlüsseln, die ein ASCII- und ein Scan-Wert ist (Strg-Taste). Ich denke, es sollte mit Ereignissen in Verbindung gebracht werden. – bragboy