我正在编写一个小游戏,其中一个JFrame包含主游戏,另一个JFrame显示分数。问题是,当我完成构建它们时,得分JFrame总是最终集中!我试过调用scoreDisplay.toFront(),scoreDisplay.requestFocus(),甚至:
display.setState(JFrame.ICONIZED);
display.setState(JFrame.NORMAL);
有没有办法让这项工作? 提前致谢, 约翰穆拉诺
答案 0 :(得分:8)
切换alwaysOnTop
见这里:
http://forums.sun.com/thread.jspa?threadID=5124278
在API中阅读toFront http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Window.html#toFront
某些平台可能不允许此VM 将Windows放在Windows的窗口之上 本机应用程序,或Windows的 其他虚拟机。
在Windows操作系统上,例如toFront 导致任务栏上的图标 闪烁,但窗口停留在 回来。
唯一会认为会强迫的 窗口到前面是setAlwaysOnTop。
frame.setAlwaysOnTop(true);
frame.setAlwaysOnTop(false);
答案 1 :(得分:8)
调用requestFocus()
方法。
这不能保证有效,因为操作系统不允许帧具有焦点的原因有很多。在不同的应用程序中可能存在具有更高优先级的另一帧。还有一些Linux桌面(如果我没记错的话)不允许帧请求焦点。
为了让您获得更大的成功机会,我还建议您在请求关注之前调用toFront()
方法。
frame.setVisible(true);
frame.toFront();
frame.requestFocus();
请记住,这一点都不能保证,因为帧处理(尤其是焦点和分层)非常依赖于操作系统。因此,将框架设置为可见,将其移动到前面,并请求焦点。一旦放弃EDT,操作系统可能会使框架成为焦点。至少,窗口应该在顶部。
答案 2 :(得分:3)
我将采取的方式是:
frame.toFront();
frame.setState(Frame.NORMAL);
并且如果您还希望对其进行更多控制,则应使用requestFocuse。
顺便说一句,这是一个例子: http://coding.derkeiler.com/Archive/Java/comp.lang.java.gui/2006-06/msg00152.html答案 3 :(得分:3)
您是否考虑将得分设置在与游戏框架相同的框架中?
其他可能的(快速和肮脏)选项是以相反的顺序创建它们,或者至少(如果得分取决于游戏)以相反的顺序显示它们。
score.setVisible( true );
game.setVisible( true );
我的猜测是目前它们是:
game.setVisible( true );
score.setVisible( true );
答案 4 :(得分:0)
只需在JOptionPaneMessageDialog代码上方添加以下代码行... this.setAlwaysOnTop(假);
答案 5 :(得分:-2)
frame.setExtendedState( JFrame.MAXIMIZED_BOTH);
frame.setVisible(true);
尝试上述..