【问题标题】:JDialog Not Displaying When in Fullscreen ModeJDialog 在全屏模式下不显示
【发布时间】:2023-03-10 09:09:01
【问题描述】:

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

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

对话框似乎处于活动状态——尤其是因为如果我将其设为模态,它会阻止输入——但只是没有显示或隐藏。那么,在全屏模式下显示 JDialog 有什么明显的技巧吗?我可能会忽略或遗漏什么?

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

【问题讨论】:

  • 哦哦。这对我来说不是个好兆头:“Windows 不能与全屏窗口重叠。所有其他应用程序窗口将始终按 Z 顺序显示在全屏窗口下方。”来自 GraphicsDevice 的 API:java.sun.com/j2se/1.4.2/docs/api/java/awt/…

标签: java swing fullscreen jdialog


【解决方案1】:

您真的想在此应用中处于全屏模式吗?这更像是一种游戏功能——我一直认为,为了更直接地访问帧缓冲区。您是否阅读过本教程:

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

在我看来确实不是带有子窗口的 Swing 应用程序的最佳选择。

【讨论】:

  • 值得考虑的好东西,但是,是的,根据客户规范,全屏模式是强制性的。这个对话框将是唯一的子窗口,所以它并不复杂。
  • 目前我的客户规范也是强制性的。如果您在任何类型的生产环境中工作,将其添加到您的工具箱中都会很有用。
【解决方案2】:

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

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

最后,我重新配置了我的应用程序,使其稍后才进入全屏模式。这仍然在开始时为我提供了一个相当不错的演示,并允许我的 JDialog 正常运行。即使在我的应用程序的“中间”,转换到全屏模式也是快速而顺畅的。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      尝试使用它。不是独占全面屏但足够接近了。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-19
        相关资源
        最近更新 更多