作为注释程序的一部分,我有一段代码摘录,负责撤消在图像上绘制的最后一点:
Action undoListener = new AbstractAction(){
public void actionPerformed(ActionEvent actionEvent){
System.out.println(actionEvent.getActionCommand());
imagePanel.undoLastPoint();
}
};
JButton undoPointButton = new JButton("Undo Last Point");
undoPointButton.addActionListener(undoListener);
KeyStroke ctrlZKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_Z, ActionEvent.CTRL_MASK);
JPanel thisContentPane = (JPanel)this.getContentPane();
thisContentPane.getInputMap().put(ctrlZKeyStroke, "undo");
thisContentPane.getActionMap().put("undo", undoListener);
如您所见,用户可以通过单击撤消按钮或按键盘上的 Ctrl + Z 来激活undo
操作。我有兴趣看看为每个方法返回的action命令显示了什么。对于按钮单击,输出是明智的 - 它打印“撤消最后一点”。但是,对于键盘快捷键,它会向终端打印一个奇怪的2X2二进制数字网格。
我想知道是否有办法明确设置键盘快捷键返回的操作命令,因为区分两者或者可能表示它们代表相同的东西可能很有用。
我查找了InputMap
,ActionMap
和KeyStroke
的Java API,但未找到任何线索。也许问题在于我正在以完全错误的方式思考actionCommand
是什么以及它是什么?