*更新 - 我从我的MacBook上取下了我的项目并将其移动到Windows计算机(相同的代码),代码就像它应该的那样工作!有谁知道为什么会这样?
这是我在Stack Overflow上的第一个问题,所以我会尽力做正确的格式化。
我正在制作一个简单的Pong程序,它需要一个桨来上下移动关键事件(A& Z)。当我只是键入一个键时,关键事件工作得很完美,但是当我因某种原因按住一个键太久时键事件完全停止工作,这意味着即使键入键也不会再注册任何内容,直到我重新启动程序
我已经搜索了超过2个小时的答案但没有用。每个似乎相似的问题最终都会得到重点是问题的答案,并在InputMap中添加JComponent.WHEN_IN_FOCUSED_WINDOW。但是我已经尝试了这个,它根本没有帮助或解决我的问题。
这是我的代码:
public class ColorPanel extends JPanel implements ActionListener{
public ColorPanel(Color backColor, int width, int height){
//Non Relavent coding removed
//Code for KeyBinding
InputMap im = getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
ActionMap am = getActionMap();
im.put(KeyStroke.getKeyStroke(65, 0, false), "actionName");
im.put(KeyStroke.getKeyStroke(65, 0, true), "actionName");
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_Z, 0, true), "actionName");
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_Z, 0, false), "actionName");
am.put("actionName", new AbstractAction("actionName") {
public void actionPerformed(ActionEvent e) {
//System.out.println("---" + e.getActionCommand() + "---");
if(e.getActionCommand().equals("a")){
System.out.println("a!");
}else if (e.getActionCommand().equals("z")){
System.out.println("z!");
}
}
});
}
答案 0 :(得分:0)
您需要禁用按住某个键时通常显示的macOS重音弹出窗口。出于某种原因,这会让Java感到困惑。见这里:http://www.techradar.com/how-to/computing/apple/easy-mac-hacks-disable-the-pop-up-accent-window-when-typing-1305618
答案 1 :(得分:-1)
我在Mac上遇到完全相同的问题,并且如此处所述,罪魁祸首是用于重音键的mac的弹出窗口。这是一个不那么完美的解决方法:
每当问题发生且密钥停止工作时,首先点击任何"文本字段"在框架中使其聚焦,然后用重音弹出框(例如" a"键)保持这些键中的任何一个,直到弹出显示。然后点击退出键,然后所有键再次开始工作。