如何在Java中激活窗口?

时间:2010-10-23 18:36:42

标签: java swing

我想以编程方式激活我的Swing应用程序。我的意思是我想编写导致JFrame可见和聚焦的代码(窗口标题应突出显示)。 我尝试使用requestFocus()。仅当应用程序至少有2个窗口A和B时才有效:A隐藏,B可见。现在,如果我拨打A.requestFocus(),它就会变得活跃。如果应用程序只有一个窗口或两个窗口都不可见,则不会发生这种情况。

我找到了2个解决方法。

  1. 使用始终位于顶部的假透明未装饰框架。这个假窗口将扮演窗口B的角色。我没有尝试实现它,但它似乎应该可以工作。
  2. 致电A.setAlwaysOnTop(true)。这使窗口A位于其他窗口之上。但它还没有成为焦点。使用java.awt.Robot(mouseMove,mousePress,mouseRelease)单击窗口A的标题。 现在调用A.setAlwaysOnTop(false)并将鼠标指针返回到其先前的位置。 我实现了代码并且它可以工作,但它看起来像一个丑陋的解决方法。
  3. 是否有“正确”的解决方案?

5 个答案:

答案 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)上-它可以正常且稳定地运行