【问题标题】:How can I create a Java Swing app that covers the Windows Title bar?如何创建覆盖 Windows 标题栏的 Java Swing 应用程序?
【发布时间】:2009-04-06 19:34:06
【问题描述】:

我正在开发一个将在心理学实验中使用的 java swing 应用程序,研究人员要求我制作程序“黑屏”,以便用户不会受到外部刺激。他们希望 swing 应用真正实现全屏显示,并且顶部没有任何类型的标题栏或最小化/最大化/关闭按钮。

该软件将在使用 JavaSE 6 的 Windows XP 环境中运行。

我该怎么做,如果适用,请提供代码 sn-p。

谢谢!

【问题讨论】:

    标签: java user-interface swing


    【解决方案1】:

    使用全屏 Java API?

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

    http://www.artificis.hu/2006/03/16/java-awtswing-fullscreen

    JFrame fr = new JFrame();
    fr.setResizable(false);
    if (!fr.isDisplayable()) {
        // Can only do this when the frame is not visible
        fr.setUndecorated(true);
    }
    GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
    try {
      if (gd.isFullScreenSupported()) {
        gd.setFullScreenWindow(fr);
      } else {
        // Can't run fullscreen, need to bodge around it (setSize to screen size, etc)
      }
      fr.setVisible(true);
      // Your business logic here
    } finally {
      gd.setFullScreenWindow(null);
    }
    

    【讨论】:

    • 您能否(简明扼要地)解释一下这些 API 是如何使用的,而不仅仅是发布链接?我显然会阅读链接,但仍然......
    • 全屏模式使用与普通 Swing 应用程序不同的范例。它适用于游戏或屏幕保护程序之类的东西。正如链接所说,“大多数全屏独占应用程序更适合使用未装饰的窗口。”这是一个选项,但需要您自己编写更多代码。
    • 这是两个链接的混搭,未经测试。有帮助吗?
    • erickson - 用户要求:让程序“黑屏”,以免用户受到外界刺激
    • 很遗憾,我不太了解这个特定的 API,无法为您提供代码示例,但如果我是您,我肯定会投入精力来学习它。这听起来完全适合您的问题。
    【解决方案2】:

    使用setUndecorated(true) 属性。请注意,这必须在使框架可见之前完成。

    JFrame frame = new JFrame();
    Toolkit tk = Toolkit.getDefaultToolkit();
    frame.setBounds(new Rectangle(new Point(0, 0), tk.getScreenSize()));
    frame.setUndecorated(true);
    frame.setVisible(true);
    

    【讨论】:

      【解决方案3】:

      我知道这个帖子很旧,但我在自己搜索如何做同样的事情时发现了它。我找不到任何我想使用的解决方案,所以我想出了这个。我发现下面的解决方案不仅有效,而且比上面的答案简单得多。

      JFrame frame = new JFrame();
      frame.setResizable(false);
      frame.setUndecorated(true);
      Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
      frame.setSize(dim);
      frame.setVisible(true);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-07
        • 1970-01-01
        • 2011-04-29
        • 1970-01-01
        • 2016-01-18
        • 1970-01-01
        • 1970-01-01
        • 2023-02-09
        相关资源
        最近更新 更多