【发布时间】:2012-12-15 00:32:29
【问题描述】:
我让 JButton 通过 ActionListener 执行一些操作。在我尝试使用 Action 绑定键盘快捷键(在this 之后)后,鼠标点击按钮有效,但对键盘没有反应。
之前的代码
在面板中创建的按钮,添加了 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 个像素,在原始代码中也是如此。但是对于新动作,它似乎每次点击都会移动两次甚至三次,这表明某个动作有一些奇怪的行为。
【问题讨论】:
标签: java swing key-bindings