在窗口中请求焦点

时间:2012-05-30 22:17:28

标签: 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 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 LOOK活跃起来,而不只是表现活跃吗?

示例:http://nexrem.com/projects/FocusDemo.rar我在NetBeans中快速完成了这项工作,您所做的是:

点击打开screen1。它打开并集中精力。单击打开JTable。它打开并有焦点。 Screen1失去了焦点。点击Esc关闭JInternalFrame。它关闭,但screen1似乎没有焦点(至少在视觉上)。我怀疑它可能与焦点循环有关,因为它介于两个JInternalFrames之间......

1 个答案:

答案 0 :(得分:3)

您正在寻找screen.setSelected(true);(我刚刚尝试了您的代码,现在可以使用了。)

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

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

但我不确定这会改善你的情况。