如何关注JFrame?
我正在写一个小游戏,一个JFrame包含主游戏,另一个JFrame显示得分。 问题是,当我完成构建它们时,得分JFrame总是最终集中注意力! 我试过调用scoreDisplay.toFront(),scoreDisplay.requestFocus(),甚至:
display.setState(JFrame.ICONIZED); display.setState(JFrame.NORMAL);
有没有办法让这项工作? 在此先感谢,约翰穆拉诺
您是否考虑将得分设置在与游戏框架相同的框架中?
其他可能的(快速和脏)选项是以相反的顺序创建它们,或者至少(如果得分取决于游戏)以相反的顺序显示它们。
score.setVisible( true ); game.setVisible( true );
我猜他们目前是:
game.setVisible( true ); score.setVisible( true );
切换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置于本机应用程序的窗口或其他VM的Windows之上。
在Windows操作系统上,例如toFront导致任务栏上的图标闪烁,但窗口保持在后面。
唯一会强制窗口向前的想法是setAlwaysOnTop。
frame.setAlwaysOnTop(true); frame.setAlwaysOnTop(false);
调用requestFocus()
方法。
这不能保证有效,因为操作系统不允许帧具有焦点的原因有很多。 在不同的应用程序中可能存在具有更高优先级的另一帧。 还有一些Linux桌面(如果我没记错的话)不允许帧请求焦点。
为了给你更好的成功机会,我还建议在请求焦点之前调用toFront()
方法。
frame.setVisible(true); frame.toFront(); frame.requestFocus();
请记住,这一切都不能保证,因为帧处理,尤其是焦点和分层,是非常依赖于操作系统的。 因此,将框架设置为可见,将其移至前方,并请求焦点。 一旦放弃EDT,操作系统可能会使框架成为焦点。 至少,窗口应该在顶部。
我会这样做的方式是:
frame.toFront(); frame.setState(Frame.NORMAL);
如果你还想对它有更多的控制权,你应该使用requestFocuse。
BTW,这是一个例子: http : //coding.derkeiler.com/Archive/Java/comp.lang.java.gui/2006-06/msg00152.html
只需在JOptionPaneMessageDialog代码上添加以下代码行… this.setAlwaysOnTop(false);
frame.setExtendedState( JFrame.MAXIMIZED_BOTH); frame.setVisible(true);
试试以上..