首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >requestFocus()可以在Mac上运行,但不能在Windows上运行

requestFocus()可以在Mac上运行,但不能在Windows上运行
EN

Stack Overflow用户
提问于 2012-01-13 00:29:41
回答 3查看 595关注 0票数 0

在我的程序中,我有一个请求焦点监听一些关键事件的JTabbedPane,它在我的mac上运行得很好。然而,当我切换到Windows机器时,焦点似乎丢失了。无法再监听关键事件。

我在windows上也有setRequestFocusEnabled(true),我的mac上就不需要了。

我该如何解决这个问题呢?

EN

回答 3

Stack Overflow用户

发布于 2012-01-13 00:39:49

不鼓励使用requestFocus,因为它试图将焦点放在组件的窗口上,这并不总是possible.In现代的JDK,您应该坚持使用requestFocusInWindow方法

你有没有尝试过这种方法?

票数 1
EN

Stack Overflow用户

发布于 2012-01-13 01:00:57

我自己也遇到过这个问题,你需要使用键绑定来让它正常工作。您将键击绑定到特定的操作:)。然后,通过字符串键(在我的示例中为"space")将inputmap链接到actionmap。您可以使用匿名内部AbstractAction类,但如果您调用非最终变量,它可能会抛出错误。因此在类中调用一个新私有类来扩展AbstractAction

代码语言:javascript
复制
    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);



            }}));
        }
票数 1
EN

Stack Overflow用户

发布于 2012-01-13 08:37:17

requestFocus()的JavaDocs

请注意,不鼓励使用此方法,因为其行为与平台相关。建议使用requestFocusInWindow(boolean)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8838572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档