在我的程序中,我有一個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