如何在Java中激活窗口?
我想以编程方式激活Swing应用程序。我的意思是,我想编写代码,使如何在Java中激活窗口?,java,swing,Java,Swing,我想以编程方式激活Swing应用程序。我的意思是,我想编写代码,使JFrame可见并聚焦(窗口标题应突出显示)。 我尝试使用requestFocus()。只有当应用程序至少有两个窗口A和B时,它才能工作:A是隐藏的,B是可见的。现在,如果我调用A.requestFocus(),它将根据我的需要变为活动状态。如果应用程序只有一个窗口或两个窗口都不可见,则不会发生这种情况 我找到了两个解决办法 使用始终位于顶部的假透明未装饰框架。这个假窗口将扮演窗口B的角色。我没有尝试实现它,但它似乎应该工作 调用
JFrame
可见并聚焦(窗口标题应突出显示)。
我尝试使用requestFocus()
。只有当应用程序至少有两个窗口A和B时,它才能工作:A是隐藏的,B是可见的。现在,如果我调用A.requestFocus()
,它将根据我的需要变为活动状态。如果应用程序只有一个窗口或两个窗口都不可见,则不会发生这种情况
我找到了两个解决办法
java.awt.Robot
(mouseMove、mousePress、mouseerelease)单击窗口a的标题。
现在调用A.setAlwaysOnTop(false),并将鼠标指针返回到以前的位置。
我实现了代码,它可以工作,但它看起来像一个丑陋的解决办法李>
有“正确”的解决方案吗?应该这样做:
frame.setSelected(true);
您可能希望它位于try/catch块中
如果这在您使用的操作系统上不起作用,还有两种可能性:
frame.setAlwaysOnTop(true);
frame.setAlwaysOnTop(false);
及
关于你想知道的所有令人痛苦的细节,请参阅本页:我和你在同一条船上——以上都不起作用 “我的”解决方案如下:
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
我发现了这个问题的解决方法:
//frame - JFrame
frame.setExtendedState(JFrame.ICONIFIED);
frame.setExtendedState(JFrame.NORMAL);
frame.toFront();
frame.requestFocus();
在我的配置中(win 7,java 12)-它工作正常且稳定,据我所知,没有
框架。setSelected
方法我尝试了这两种方法,但不幸的是,这两种方法都不适用于我。setAlwaysOnTop将窗口置于顶部,但不会使其处于活动状态。这是我已经知道的。toFront()使工具栏上相应的按钮闪烁,但窗口不显示。所以,我用Robot模拟鼠标点击窗口标题的技巧似乎还不错……toFront()很有意义。非常感谢。使用requestFocusInWindow
代替requestFocus
,请参阅。@Geoffrey-no。。。这是为了聚焦窗口内部的组件,而不是窗口本身。这可能是一个很好的链接,可以让他检查自己是否仍然有问题。谢谢你的更正,不过我认为更常见的做法是关注一个接受用户输入的内部组件,而不是框架本身,因为如果框架的默认组件是可编辑文本,用户可以立即开始键入。谢谢。虽然很多年前我问过这个问题,但现在这个项目已经无关紧要了,我可能会尝试你的解决方案。唯一有效的答案是谢谢!
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
//frame - JFrame
frame.setExtendedState(JFrame.ICONIFIED);
frame.setExtendedState(JFrame.NORMAL);
frame.toFront();
frame.requestFocus();