2012-01-12 86 views
0

在我的程序中,我有一個JTabbedPane,它要求重點傾聽一些關鍵事件,並且它可以在我的Mac上正常工作。但是,當我切換到Windows機器時,焦點似乎丟失了。關鍵事件不能再被聆聽。requestFocus()在Mac上可用,但不能在Windows上工作

我有setRequestFocusEnabled(true)以及在Windows中,我不需要在我的Mac上。

我該如何解決這個問題?

+1

請提供一個[sscce](http://sscce.org/),展示您描述的問題。 – trashgod 2012-01-12 21:43:00

回答

1

requestFocus,不鼓勵,因爲它試圖將焦點放到該組件的窗口,這並不總是possible.In現代化的JDK,你應該用requestFocusInWindow方法

你嘗試這個方法堅持下去?

+0

我做了,它似乎沒有工作 – eytanfb 2012-01-12 17:32:24

1

我自己有這個問題,你需要使用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); 



      }})); 
     } 
相關問題