【问题标题】:Full Screen Exclusive Mode全屏独占模式
【发布时间】:2014-05-18 11:35:40
【问题描述】:

我想在我已经制作的程序中实现全屏独占模式,我的主类是freeTTS.java,即:

package freetts;

public class FreeTTS {

public static void main(String[] args) {


   new FormTTS().setVisible(true);


    }
}

整个程序的其他代码在JFrame的子类FormTTS.java中。

我尝试将代码放在这里使其全屏显示,但它给出了各种不同的错误,我必须将代码放在 FreeTTS 或 FormTTS 中吗?

这是我的文件结构:(注意:FormTTS 是另一个 java 文件)

看到我想删除粉红色的整个边框:

【问题讨论】:

  • 什么是 FormTTS? JFrame 的子类?
  • 这是另一个java文件
  • 它是JFrame 组件吗?如果是,请尝试frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
  • @Braj 不,这是另一个 java 文件
  • 另一个是什么?请分享最重要的代码。

标签: java swing fullscreen


【解决方案1】:

来自您的last question,答案可能与 netbeans GUI builder 格式和您的程序设计不兼容,所以这里有一个可能更兼容的示例。试试看会发生什么。

import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class FormTTS extends JFrame {
    private boolean isFullScreen = false;
    private JButton button;

    public FormTTS() {
        initComponents();
        initFullScreen();
    }

    private void initComponents() {
        setLayout(new GridBagLayout());
        button = new JButton(
                "I'm a smallbutton in a Huge Frame, what the heck?!");
        add(button);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
    }

    private void initFullScreen() {
        GraphicsEnvironment env = GraphicsEnvironment
                .getLocalGraphicsEnvironment();
        GraphicsDevice device = env.getDefaultScreenDevice();
        isFullScreen = device.isFullScreenSupported();
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setUndecorated(isFullScreen);
        setResizable(!isFullScreen);
        if (isFullScreen) {
            // Full-screen mode
            device.setFullScreenWindow(this);
            validate();
        } else {
            // Windowed mode
            this.pack();
            this.setExtendedState(MAXIMIZED_BOTH);
            this.setVisible(true);
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new FormTTS().setVisible(true);
            }
        });
    }
}

【讨论】:

  • @peeskilllet 我必须将代码放在 freetts 中,对吗?以及如何将这段代码放入其中?
  • 我可以看到你已经从代码中添加了按钮,你能告诉我可以集成到我的程序中的代码来检查它
  • 你只需要布尔值和方法initFullScreen()。我只是添加了按钮,所以框架会有一些东西。 initComonents() 是自动生成的代码
  • 这个一定要放到freetts.java还是formtts.java里?从代码中我假设 formtts 但我的主要课程是 freetts
  • 我刚刚使用JFrame 表单对其进行了测试,得到了IllegalComponentStateException。这是因为setUndecorated。我必须在pack() 之前接到电话。但是pack() 在自动生成的代码中。我试图弄清楚。如果你注释掉setUndecorated,它会起作用,但你会看到框架。给我一点时间来尝试弄清楚。
【解决方案2】:

您应该能够执行以下操作,尽管我建议您阅读官方guide on fullscreen exclusive mode

FormTTS ftts = new FormTTS();

GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
gd.setFullScreenWindow(ftts);

ftts.setUndecorated(true);
ftts.setVisible(true);

【讨论】:

  • 在哪里添加这个?主要吗?
  • @DakshShah - 是的,只需将其替换为您现在在 main 中的内容即可。不过,我确实建议您阅读该指南,因为它通常比这更多。
  • 我仍然可以看到边界 :(
  • 还有边界
  • @DakshShah - 在这种情况下,您需要调用 setUndecorate(true)。我已将其添加到答案中。
猜你喜欢
  • 2012-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多