如何聚焦 JFrame?

新手上路,请多包涵

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

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

有什么办法可以使这项工作?提前致谢, 约翰穆拉诺

原文由 John Murano 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 376
2 个回答

有没有考虑把分数和游戏帧设置在同一个帧?

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

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

我的猜测是目前他们是:

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

原文由 OscarRyz 发布,翻译遵循 CC BY-SA 2.5 许可协议

调用 requestFocus() 方法。

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

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

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

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

原文由 Erick Robertson 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题