java - 如何让JFrame充满整个显示器屏幕?

标签 java swing jframe fullscreen

我正在用 Java 创建一个应用程序,需要填充所有的监视器屏幕。

我正在使用 .setExtendedState(MAXIMIZED_BOTH) 但它只满足工作区。

        JFrame frame = new JFrame("Pomodoro");
        frame.setContentPane(new Pomodoro().panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
        frame.setExtendedState(MAXIMIZED_BOTH);
        frame.setUndecorated(true);
     }

我希望该应用程序能够占据所有显示器屏幕 - 就像 YouTube 视频一样。 现在,当我打开应用程序时,它的 Linux 菜单位于右侧和顶部,但是当我将应用程序移至第二个显示器时,它会填充所有显示器屏幕。

最佳答案

虽然这通常足以显示全屏窗口(方法顺序很重要!):

public class FullscreenWindow
{
    public static void main ( final String[] args )
    {
        SwingUtilities.invokeLater ( new Runnable ()
        {
            @Override
            public void run ()
            {
                final JFrame frame = new JFrame ();
                frame.setExtendedState ( JFrame.MAXIMIZED_BOTH );
                frame.setUndecorated ( true );
                frame.setVisible ( true );
            }
        } );
    }
}

仅仅让您的系统将该窗口识别为真正的全屏是不够的。不过,您是否需要它取决于您,因为真正的全屏窗口有其自身的优点和缺点。

要使任何窗口成为系统中的实际全屏窗口 - 您需要将其传递到图形设备,如下所示:

public class FullscreenWindow
{
    public static void main ( final String[] args )
    {
        SwingUtilities.invokeLater ( new Runnable ()
        {
            @Override
            public void run ()
            {
                final JFrame frame = new JFrame ();
                frame.setExtendedState ( JFrame.MAXIMIZED_BOTH );
                frame.setUndecorated ( true );
                frame.setVisible ( true );
                frame.getGraphicsConfiguration ().getDevice ().setFullScreenWindow ( frame );
            }
        } );
    }
}

图形设备基本上代表您连接到 PC 的单个屏幕设备,显然可能有多个。

虽然上面的示例只会使您的窗口在当前图形设备(窗口主要放置的屏幕)上全屏显示,但您也可以在任何其他可用的图形设备上使窗口全屏显示。

您可以像这样检索可用图形设备的完整列表:

GraphicsDevice[] screenDevices = GraphicsEnvironment.getLocalGraphicsEnvironment ().getScreenDevices ();

您还可以请求图形设备的实际尺寸及其相互之间的相对位置,以更好地了解用户屏幕相对于彼此的位置(在系统设置中配置)。

关于java - 如何让JFrame充满整个显示器屏幕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57713447/

相关文章:

java - Java Swing JScrollBar 何时更新其大小?

java - Antisamy 删除脚本标记后的字符串

java - 单击两个按钮 Swing

java - 在 JTable 中设置列​​标题

java - 如何在JFrame中显示图像

java - 关于 JFrame 的问题

java - 在封闭范围内定义的局部变量计数必须是最终错误

java - "Failed to load Premain-Class manifest attribute"尝试使用 java 代理获取对象的大小时

java - 如何使 JTextField 输入在其他类中可访问

java - 如何设置 JFrame 背景透明但 JPanel 或 JLabel 背景不透明?