Java 在窗口中请求焦点

Java 在窗口中请求焦点,java,swing,focus,jcomponent,jinternalframe,Java,Swing,Focus,Jcomponent,Jinternalframe,我有一个简单的(不是?)问题,就是在处理JTable之后,如何将焦点放在JInternalFrame上 //I created a table, set it to visible, gave it focus. list.dispose(); //I did what I wanted with the table and I dispose of it screen.setVisible(true); //The screen is already visible. this isn't r

我有一个简单的(不是?)问题,就是在处理JTable之后,如何将焦点放在JInternalFrame上

//I created a table, set it to visible, gave it focus.
list.dispose(); //I did what I wanted with the table and I dispose of it
screen.setVisible(true); //The screen is already visible. this isn't really needed
//After I closed table, I want the focus return to the screen (JInternalFrame)
screen.setFocusable(true); 
screen.requestFocus();
screen.requestFocusInWindow();
screen.requestFocus(true);
desktopPane.setSelectedFrame(screen);
所以发生的事情是这样的:屏幕确实获得了焦点,从某种意义上说,当我检查哪个组件具有焦点时,它确实返回我屏幕。但是这个条(这里不确定正确的术语)顶部的条,包含图标,标题,X thingy,是灰色的而不是蓝色的

你知道我如何让JInternalFrame看起来活跃,而不仅仅是表现活跃吗

示例:我在NetBeans中很快就做到了这一点,您要做的是:

单击打开屏幕1。它打开并聚焦。单击以打开JTable。它打开并具有焦点。屏幕1失去了焦点。按Esc键关闭JInternalFrame。它关闭了,但屏幕1似乎没有焦点(至少在视觉上)。我怀疑这可能与焦点循环有关,因为它在两个JInternalFrames之间…

您正在寻找(我刚刚在您的代码上试用过,现在可以使用了)

至于@HFOE的建议,他的意思是这样做:

SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        screen.requestFocus();
        screen.requestFocusInWindow();
        screen.requestFocus(true);
    }
});
但我不确定这是否会改善您的情况。

您正在寻找的(我刚刚在您的代码上试用过,现在可以使用了)

至于@HFOE的建议,他的意思是这样做:

SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        screen.requestFocus();
        screen.requestFocusInWindow();
        screen.requestFocus(true);
    }
});

但我不确定这是否会改善您的情况。

如果您在事件线程中将请求排队,该怎么办?另外,如果你没有得到一个像样的正确答案,考虑创建并发布一个.@ HoVrFrFtFulfFeels,不完全确定如何做你所要求的,但我已经编辑了我的帖子,包括一个链接到我的NETBeS项目。我做了一个快速清理的演示。如果你在事件线程上对请求进行排队怎么办?另外,如果你没有得到一个像样的正确答案,考虑创建并发布一个.@ HoVrFrFtFulfFeels,不完全确定如何做你所要求的,但我已经编辑了我的帖子,包括一个链接到我的NETBeS项目。我制作了一个快速清晰的演示。