在我的程序中,我有一个JTabbedPane,它要求重点倾听一些关键事件,并且它可以在我的Mac上正常工作。但是,当我切换到Windows机器时,焦点似乎丢失了。关键事件不能再被聆听。requestFocus()在Mac上可用,但不能在Windows上工作
我有setRequestFocusEnabled(true)
以及在Windows中,我不需要在我的Mac上。
我该如何解决这个问题?
在我的程序中,我有一个JTabbedPane,它要求重点倾听一些关键事件,并且它可以在我的Mac上正常工作。但是,当我切换到Windows机器时,焦点似乎丢失了。关键事件不能再被聆听。requestFocus()在Mac上可用,但不能在Windows上工作
我有setRequestFocusEnabled(true)
以及在Windows中,我不需要在我的Mac上。
我该如何解决这个问题?
requestFocus
,不鼓励,因为它试图将焦点放到该组件的窗口,这并不总是possible.In现代化的JDK,你应该用requestFocusInWindow
方法
你尝试这个方法坚持下去?
我做了,它似乎没有工作 – eytanfb 2012-01-12 17:32:24
我自己有这个问题,你需要使用keybindings才能正常工作。您将关键笔划绑定到特定操作:)。然后通过String键将输入映射关联到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);
}}));
}
从JavaDoc中一个新的私有类requestFocus()
:
注意,使用这种方法是不鼓励,因为它的行为是与平台相关的。相反,我们建议使用
requestFocusInWindow(boolean)
请提供一个[sscce](http://sscce.org/),展示您描述的问题。 – trashgod 2012-01-12 21:43:00