我正在写一个小游戏,一个JFrame包含主游戏,另一个JFrame显示得分.问题是,当我完成构建它们时,得分JFrame总是最终集中!我试过调用scoreDisplay.toFront(),scoreDisplay.requestFocus(),甚至:
display.setState(JFrame.ICONIZED); display.setState(JFrame.NORMAL);
有没有办法让这项工作?在此先感谢,约翰穆拉诺
调用requestFocus()
方法.
这不能保证有效,因为操作系统不允许帧具有焦点的原因有很多.在不同的应用程序中可能存在具有更高优先级的另一帧.还有一些Linux桌面(如果我没记错的话)不允许帧请求焦点.
为了给您更好的成功机会,我还建议toFront()
在请求焦点之前调用该方法.
frame.setVisible(true); frame.toFront(); frame.requestFocus();
请记住,这一点都不能保证,因为帧处理(尤其是焦点和分层)非常依赖于操作系统.因此,将框架设置为可见,将其移动到前面,并请求焦点.一旦放弃EDT,操作系统可能会使框架成为焦点.至少,窗口应该在顶部.
切换 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);