2012-01-12 102 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); 



      }})); 
     } 
相关问题