在我的程序中,我有一个请求焦点监听一些关键事件的JTabbedPane,它在我的mac上运行得很好。然而,当我切换到Windows机器时,焦点似乎丢失了。无法再监听关键事件。
我在windows上也有setRequestFocusEnabled(true),我的mac上就不需要了。
我该如何解决这个问题呢?
发布于 2012-01-13 00:39:49
不鼓励使用requestFocus,因为它试图将焦点放在组件的窗口上,这并不总是possible.In现代的JDK,您应该坚持使用requestFocusInWindow方法
你有没有尝试过这种方法?
发布于 2012-01-13 01:00:57
我自己也遇到过这个问题,你需要使用键绑定来让它正常工作。您将键击绑定到特定的操作:)。然后,通过字符串键(在我的示例中为"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);
}}));
}发布于 2012-01-13 08:37:17
从requestFocus()的JavaDocs
请注意,不鼓励使用此方法,因为其行为与平台相关。建议使用
requestFocusInWindow(boolean)
https://stackoverflow.com/questions/8838572
复制相似问题