【问题标题】:requestFocus() works on Mac but not on WindowsrequestFocus() 适用于 Mac 但不适用于 Windows
【发布时间】:2012-02-08 22:45:25
【问题描述】:
在我的程序中,我有一个 JTabbedPane 请求焦点来监听一些关键事件,它在我的 mac 上运行良好。但是,当我切换到 Windows 机器时,似乎失去了焦点。无法再监听关键事件。
我在 Windows 中也有 setRequestFocusEnabled(true),而我的 Mac 上不需要。
我该如何解决这个问题?
【问题讨论】:
标签:
java
windows
macos
swing
user-interface
【解决方案1】:
requestFocus 不鼓励使用,因为它试图将焦点放在组件的窗口上,这并不总是可行的。在现代 JDK 中,您应该坚持使用 requestFocusInWindow 方法
你试过那个方法吗?
【解决方案2】:
我自己也遇到了这个问题,您需要使用键绑定才能使其正常工作。您将击键绑定到特定操作:)。然后输入图通过字符串键(在我的示例中为“空格”)链接到操作图。
您可以使用匿名的内部 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);
}}));
}