我想以编程方式激活我的Swing应用程序。我的意思是我想编写导致JFrame
可见和聚焦的代码(窗口标题应突出显示)。
我尝试使用requestFocus()
。仅当应用程序至少有2个窗口A和B时才有效:A隐藏,B可见。现在,如果我拨打A.requestFocus()
,它就会变得活跃。如果应用程序只有一个窗口或两个窗口都不可见,则不会发生这种情况。
我找到了2个解决方法。
A.setAlwaysOnTop(true)
。这使窗口A位于其他窗口之上。但它还没有成为焦点。使用java.awt.Robot
(mouseMove,mousePress,mouseRelease)单击窗口A的标题。
现在调用A.setAlwaysOnTop(false)
并将鼠标指针返回到其先前的位置。
我实现了代码并且它可以工作,但它看起来像一个丑陋的解决方法。 是否有“正确”的解决方案?
答案 0 :(得分:5)
frame.setState(Frame.NORMAL); // restores minimized windows
frame.toFront(); // brings to front without needing to setAlwaysOnTop
frame.requestFocus();
如果您想要了解难以理解的细节,请参阅此页:http://www.developer.com/java/other/article.php/3502181/Window-Focus-and-State-in-Java.htm
答案 1 :(得分:1)
这应该这样做:
frame.setSelected(true);
你可能想要它在try / catch块中......
如果这对您正在使用的操作系统不起作用,还有两种可能性:
frame.setAlwaysOnTop(true);
frame.setAlwaysOnTop(false);
和
frame.setVisible(true);
frame.setVisible(true); // Yes you need this second one
答案 2 :(得分:1)
我相信this帖可以帮到你。
答案 3 :(得分:1)
我在同一条船上 - 以上都没有。
" MY"解决方案如下:
thisFrame.getWindowListeners()[0].windowActivated(
new WindowEvent(
thisFrame,
WindowEvent.WINDOW_ACTIVATED
)
);
schedulesTable.requestFocus();
thisFrame = the window to get activated
schedulesTable = my component in the window I wanted to get focus for
答案 4 :(得分:1)
我已经找到解决问题的方法:
build.gradle
在我的配置(win 7,java 12)上-它可以正常且稳定地运行