我让 JButton 通过 ActionListener 执行一些操作。在我尝试使用 Action 绑定键盘快捷键后(在此之后),鼠标单击按钮有效,但对键盘没有反应。
之前的代码
在面板中创建的按钮,添加了 actionListener。
private FooActionListener actionListener = new FooActionListener();
buttonLeft = new JButton("Left");
up.addActionListener(actionListener);
然后,主类外的 FooActionListener 类中的 actionPerformed 方法:
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == buttonLeft) { thing.move(Direction.LEFT); }
}
代码之后
final String leftText = "Left";
final Action left = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
thing.move(Direction.LEFT);
}
};
buttonLeft = new JButton(left);
buttonLeft.setText(leftText);
KeyStroke keyLeft = KeyStroke.getKeyStroke(KeyEvent.VK_A, 0);
buttonLeft.getInputMap(buttonLeft.WHEN_IN_FOCUSED_WINDOW).put(keyLeft,
"Left");
buttonLeft.getActionMap().put("Left", left );
更新:我不太确定新代码是否真的可以用鼠标执行。假设对象应该一键移动 25 个像素,并且在原始代码中是这样。但是对于新动作,它似乎每次点击移动两次甚至三次,这表明一个动作的一些奇怪的行为。