在全屏模式下,JDialog不显示

时间:2009-11-12 15:15:16

标签: java swing fullscreen jdialog

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

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

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

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

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

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

  

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

最后,我重新配置了我的应用程序,以便它稍后才能进入全屏模式。这仍然在一开始就给我一个相当类的演示,并允许我的JDialog按照它应该运行。即使在我的应用程序的“中间”,也可以快速顺利地过渡到全屏模式。

答案 2 :(得分:1)

你真的想要在这个应用程序的全屏模式?这更像是一个游戏功能 - 我总是想到能更直接地访问帧缓冲区。你读过这个教程了吗?

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

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

答案 3 :(得分:1)

试试这个。不是专属的全屏,但它足够接近。

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