当前位置:  开发笔记 > 编程语言 > 正文

如何聚焦JFrame?

如何解决《如何聚焦JFrame?》经验,为你挑选了2个好方法。

我正在写一个小游戏,一个JFrame包含主游戏,另一个JFrame显示得分.问题是,当我完成构建它们时,得分JFrame总是最终集中!我试过调用scoreDisplay.toFront(),scoreDisplay.requestFocus(),甚至:

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

有没有办法让这项工作?在此先感谢,约翰穆拉诺



1> Erick Robert..:

调用requestFocus()方法.

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

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

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

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



2> ordnungswidr..:

切换 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);

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有