Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何聚焦JFrame?_Java_User Interface_Swing_Jframe - Fatal编程技术网

Java 如何聚焦JFrame?

Java 如何聚焦JFrame?,java,user-interface,swing,jframe,Java,User Interface,Swing,Jframe,我正在写一个小游戏,一个JFrame保存主游戏,另一个JFrame显示分数。问题是,当我完成构建它们时,分数框架总是集中在一起!我尝试调用scoreDisplay.toFront()、scoreDisplay.requestFocus(),甚至: display.setState(JFrame.ICONIZED); display.setState(JFrame.NORMAL); 有什么办法可以让这一切顺利进行吗? 提前感谢,, 约翰·穆拉诺我的做法是: frame.toFront();

我正在写一个小游戏,一个JFrame保存主游戏,另一个JFrame显示分数。问题是,当我完成构建它们时,分数框架总是集中在一起!我尝试调用scoreDisplay.toFront()、scoreDisplay.requestFocus(),甚至:

display.setState(JFrame.ICONIZED);
display.setState(JFrame.NORMAL);
有什么办法可以让这一切顺利进行吗? 提前感谢,,
约翰·穆拉诺

我的做法是:

 frame.toFront();
 frame.setState(Frame.NORMAL); 
如果你还想对它有更多的控制,你应该使用requestFocuse

顺便说一句,这里有一个例子:

< P>你是否考虑将得分设置在与游戏框架相同的框架内?

其他可能的(快速和肮脏)选项是以相反的顺序创建它们,或者至少(如果分数取决于游戏)以相反的顺序显示它们

score.setVisible( true );
game.setVisible( true );
我的猜测是,目前他们是:

game.setVisible( true );
score.setVisible( true );

始终在顶部切换

请看这里:

阅读API中的toFront

某些平台可能不允许此VM 将其窗口放置在的窗口上方 本机应用程序或Windows的 其他虚拟机

在Windows操作系统上,例如toFront 使任务栏上的图标 闪烁,但窗口仍在窗口中 回来

唯一的想法将迫使 前窗始终设置在顶部


尝试上述方法。

调用
requestFocus()
方法。

这并不能保证有效,因为操作系统不允许框架具有焦点的原因有很多。在不同的应用程序中可能存在另一个优先级更高的帧。还有一些linux桌面(如果我没记错的话)不允许帧请求焦点

为了给您更好的成功机会,我还建议在请求焦点之前调用
toFront()
方法

frame.setVisible(true);
frame.toFront();
frame.requestFocus();

请记住,这些都不能保证,因为帧处理,特别是聚焦和分层,非常依赖于操作系统。因此,将框架设置为可见,将其移动到前面,并请求对焦。一旦您放弃EDT,操作系统可能会将焦点放在框架上。至少,窗口应该在顶部。

只需在JOptionPaneMessageDialog代码上方添加以下代码行即可。。。
此.setAlwaysOnTop(false)

我试过这个,但这个方法不起作用。不过还是要谢谢你!虽然此解决方案确实解决了OP的问题,但它没有回答标题问题。对于希望关注JFrame的未来访问者,请在使用
frame.requestFocus()
的页面下方查看我的答案。公认的答案解决了OP的问题,但解决方案非常具体,适合他的情况。谢谢。这对我很有效,但有一点需要注意,我必须在frame.setVisible(true)之后(立即)调用它们。我想这是有道理的,但我是分开做的。
frame.setExtendedState( JFrame.MAXIMIZED_BOTH);
frame.setVisible(true);
frame.setVisible(true);
frame.toFront();
frame.requestFocus();