requestFocus()适用于Mac但不适用于Windows

时间:2012-01-12 16:29:41

标签: java windows macos swing user-interface

在我的程序中,我有一个JTabbedPane请求专注于听一些关键事件,它在我的mac上工作正常。但是,当我切换到Windows机器时,焦点似乎丢失了。不能再听取关键事件了。

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

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

不鼓励

requestFocus因为它试图将焦点放在组件的窗口上,这并不总是可行的。在现代JDK中,你应该坚持使用requestFocusInWindow方法

你尝试过这种方法吗?

答案 1 :(得分:1)

我自己遇到了这个问题,你需要使用键绑定才能使它正常工作。您将键击绑定到特定操作:)。然后通过String键(在我的示例“space”中)将inputmap链接到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);



            }}));
        }

答案 2 :(得分:1)

来自requestFocus()的JavaDocs:

  

请注意,不建议使用此方法,因为其行为取决于平台。我们建议使用requestFocusInWindow(boolean)