这是我用来检查按键的代码块。如果我按'esc'键,则JFrame关闭。但是,如果我按下“空格”栏,听众会按下最后一个JButton,而不是我告诉它点击的特定按钮。除非先前点击了JButton,否则doClick()也不会运行。
addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent ke) {
if(ke.getKeyCode() == KeyEvent.VK_ESCAPE) {
SaveScripts.saveData(player);
dispose();
}
if(ke.getKeyCode() == KeyEvent.VK_SPACE) {
center.buttonMenuAttack.doClick();
}
}
});
编辑1:经过一些更多的测试后,问题似乎是,当点击框架中的任何内容时,监听器会中断。
编辑2:我最终使用camickr的解决方案,它更容易设置,我没有遇到任何使用它的问题。
InputMap events = getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
ActionMap actions = getRootPane().getActionMap();
events.put(KeyStroke.getKeyStroke("SPACE"), "click");
actions.put("click", new AbstractAction() {
public void actionPerformed(ActionEvent event) {
center.bAttack.doClick();
}
});
events.put(KeyStroke.getKeyStroke("ESCAPE"), "click");
actions.put("click", new AbstractAction() {
public void actionPerformed(ActionEvent event) {
manage.bDataExit.doClick();
}
});
答案 0 :(得分:0)
我想出了这个问题。监听器停止工作,因为当单击按钮时,它变为焦点。我创建了一个扩展JButton的类,以便我的所有按钮具有相同的行为,并将以下代码行添加到其构造函数中;
setRequestFocusEnabled(false);
这样,在单击按钮后,JFrame保持聚焦状态,允许监听器按预期运行。