在我的程序中,我有一个JTabbedPane请求专注于听一些关键事件,它在我的mac上工作正常。但是,当我切换到Windows机器时,焦点似乎丢失了。不能再听取关键事件了。
我在Windows中也有setRequestFocusEnabled(true)
,我在Mac上不需要。
我该如何解决这个问题?
答案 0 :(得分:1)
requestFocus
因为它试图将焦点放在组件的窗口上,这并不总是可行的。在现代JDK中,你应该坚持使用requestFocusInWindow
方法
你尝试过这种方法吗?
答案 1 :(得分:1)
我自己遇到了这个问题,你需要使用键绑定才能使它正常工作。您将键击绑定到特定操作:)。然后通过String键(在我的示例“space”中)将inputmap链接到actionmap。 您可以使用匿名的内部AbstractAction类,但如果调用非最终变量,它可能会抛出错误。因此在该类中调用一个扩展AbstractAction
的新私有类 JPanel component = (JPanel)frame.getContentPane();
//THIS IS THE KEY BINDING CODE
component.getInputMap().put(KeyStroke.getKeyStroke("SPACE"), "space");
component.getActionMap().put("space", (new AbstractAction(){
public void actionPerformed(ActionEvent e){
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask(){
public void run(){
grid.stepGame();
}
},250, 250);
}}));
}
答案 2 :(得分:1)
来自requestFocus()
的JavaDocs:
请注意,不建议使用此方法,因为其行为取决于平台。我们建议使用
requestFocusInWindow(boolean)