11

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

display.setState(JFrame.ICONIZED);
display.setState(JFrame.NORMAL);

有什么办法可以使这项工作?在此先感谢,约翰·穆拉诺

4

6 回答 6

13

调用requestFocus()方法。

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

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

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

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

于 2015-05-29T12:29:54.207 回答
10

切换alwaysOnTop

看这里:

http://forums.sun.com/thread.jspa?threadID=5124278

阅读 API http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Window.html#toFront中的 toFront

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

在 Windows 操作系统上,例如 toFront 会导致任务栏上的图标闪烁,但窗口停留在后面。

唯一会迫使窗口靠前的是setAlwaysOnTop。

frame.setAlwaysOnTop(true); 
frame.setAlwaysOnTop(false);
于 2009-03-13T14:37:49.633 回答
4

我会做的方式是:

 frame.toFront();
 frame.setState(Frame.NORMAL); 

如果您还想对其进行更多控制,则应使用 requestFocuse。

顺便说一句,这是一个例子: http ://coding.derkeiler.com/Archive/Java/comp.lang.java.gui/2006-06/msg00152.html

于 2009-03-13T01:45:48.413 回答
4

有没有考虑把分数设置在和游戏帧相同的帧里?

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

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

我的猜测是,目前它们是:

game.setVisible( true );
score.setVisible( true );
于 2009-03-13T01:47:01.470 回答
1

只需在 JOptionPaneMessageDialog 代码上方添加以下代码行... this.setAlwaysOnTop(false);

于 2016-11-08T20:12:37.150 回答
-1
frame.setExtendedState( JFrame.MAXIMIZED_BOTH);
frame.setVisible(true);

试试上面的..

于 2012-07-11T02:37:32.357 回答