JDialog在全屏模式下不显示

Asked
Viewd6087

2

我有一个在全屏模式下运行的应用程序,并且运行正常。现在,我需要添加一个简单的,未修饰的对话框,我遇到了麻烦。如果我最大化而不是全屏运行该应用程序,该对话框将显示并按预期运行。当我切换回全屏模式时,该对话框将不会显示。

对话框扩展了JDialog,仅包含一个JSlider和几个按钮。它未经装饰且非模态。 (我出于测试目的禁用了模式-每次对话框阻止输入时强制退出应用程序都是一种痛苦。)我正在使用setFullScreenWindow()进入全屏模式,并传入应用程序的主JFrame。如果我将该JFrame设置为JDialog的所有者,则没有任何区别。如果在对话框中致电toFront(),似乎也无济于事。

该对话框似乎处于活动状态-尤其是因为如果我将其设置为模态,它将阻止输入-但只是不显示或隐藏。因此,在全屏模式下显示JDialog是否有明显的窍门?我可能会忽略或忽略的东西吗?

如果没有明显的解决方案,我可以稍后发布一些代码。不幸的是,我现在没有时间。

  • 哦,哦。这对我来说不是一个好兆头:“ Windows无法覆盖全屏窗口。所有其他应用程序窗口将始终以Z顺序显示在全屏窗口下方。”从GraphicsDevice的API中:http://java.sun.com/j2se/1.4.2/docs/api/java/awt/GraphicsDevice.html#setFullScreenWindow%28java.awt.Window%29

    ClaytonNovember 13, 2009 16:43

4 个答案

2

事实上,正如M1EK在他的回答中提到的,我在评论中提到的那样,处于全屏模式的Java应用程序将不允许其他窗口显示在它们上面。 GraphicsDevice的Javadoc API 读取:

Windows不能与全屏窗口重叠。所有其他应用程序窗口将始终以Z顺序显示在全屏窗口下方。

最后,我重新配置了我的应用程序,以使它直到稍后才进入全屏模式。在开始时,这仍然为我提供了相当不错的演示,并且允许我的JDialog正常运行。即使在我应用的“中间”状态,也可以快速,平稳地过渡到全屏模式。

1

尝试给我们看。不是排他的全屏,但足够接近。

 setExtendedState(JFrame.MAXIMIZED_BOTH);
setUndecorated(true);
 
1

您真的要为此应用进入全屏模式吗?我一直认为,这更多是游戏功能-为了更直接地访问帧缓冲区。您是否阅读过本教程:

http://java.sun.com/docs/books/tutorial/extra/fullscreen/index.html

在我看来,对于带有子窗口的Swing应用程序来说,真的不是最好的选择。

  • 目前对于我的客户规范也是必填项。如果您在任何类型的生产环境中工作,都可以将其添加到工具箱中。

    davidahinesFebruary 28, 2011 18:37
  • 值得考虑的好东西,但是,是的,根据客户端规范,必须采用全屏模式。该对话框将是唯一的子窗口,因此没有什么复杂的事情。

    ClaytonNovember 13, 2009 13:27
5

JOptionPane.showInternalXXXDialog() 方法将对话框呈现为JInternalFrames。 也许您可以考虑使用JIternaFrame来模拟对话框。