【问题标题】:Making a Java panel fullscreen制作 Java 面板全屏
【发布时间】:2018-07-02 16:55:27
【问题描述】:

您如何制作一个JComponent(面板、框架、窗口等)全屏,以便它也覆盖屏幕上的所有内容,包括窗口启动栏?

我不想改变分辨率或图形设备的任何东西,比如位深度等,我只想重叠其他所有东西。

【问题讨论】:

  • 到目前为止给出的答案有什么问题?
  • 是的,认真的。把它交给 Adamski - 你不会得到更好的答案。
  • 我的意思是,只要你不知道你不喜欢当前答案的什么地方,就没有人能够(或愿意)想出别的东西.

标签: java swing fullscreen


【解决方案1】:

查看描述 Java 的全屏模式 API 的 this tutorial

示例代码(取自教程)。请注意,代码在Window 上运行,因此您需要将JPanel 嵌入Window(例如JFrame)才能执行此操作。

GraphicsDevice myDevice;
Window myWindow;

try {
    myDevice.setFullScreenWindow(myWindow);
    ...
} finally {
    myDevice.setFullScreenWindow(null);
}

【讨论】:

    【解决方案2】:

    您可以尝试一些codes in this page,允许容器填充屏幕(因此它不是单个组件的解决方案,而是容器内的一组组件,例如JFrame)

    public class MainWindow extends JFrame
    {
      public MainWindow()
      {
        super("Fullscreen");
        getContentPane().setPreferredSize( Toolkit.getDefaultToolkit().getScreenSize());
        pack();
        setResizable(false);
        show();
    
        SwingUtilities.invokeLater(new Runnable() {
          public void run()
          {
            Point p = new Point(0, 0);
            SwingUtilities.convertPointToScreen(p, getContentPane());
            Point l = getLocation();
            l.x -= p.x;
            l.y -= p.y;
            setLocation(l);
          }
        });
      }
      ...
    }
    

    【讨论】:

    • 您能否解释一下为什么会这样。特别是runnable中的部分,例如l.x -= p.x;之后的行。它有效,但我也想完全理解它。
    • @Connorelsea 在一个单独的问题中提出这个问题可能更容易:5 年以上,并且不记得所有细节。
    【解决方案3】:

    您需要使用以下 API:http://java.sun.com/docs/books/tutorial/extra/fullscreen/index.html

    全屏显示并不像制作大面板那么简单,您需要查看底层操作系统图形。但是你的 JPanel 代码应该翻译得很好。

    【讨论】:

      【解决方案4】:

      我需要进行大量搜索才能做到这一点。这是它的完整工作版本,以便我以后也可以找到它并使用它。

      第 1 步:创建一个名为 fullscreen.java 的文件

      第 2 步:复制此代码并按原样粘贴:

      import javax.swing.*;
      import java.awt.*;
      import java.awt.event.*;
      
      public class fullscreen extends Window 
      {
        private Button button;
      
        public fullscreen() 
        {
          super(new Frame());
          button = new Button("Close");
          button.addActionListener(new ActionListener() 
          {
            public void actionPerformed(ActionEvent e) 
            {
              System.exit(0);
            }
          });
      
          setLayout(new FlowLayout());
          add(button);
      
          Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
          setBounds(0,0,screenSize.width, screenSize.height);
        }
      
        public static void main(String[] args) 
        {
          // This will take over your whole screen tested and works in my:
          // Fedora 12/13/14
          // CentOS 5.0
          // if this works for you, in other platforms, please leave a comments which OS it worked.
          // happy coding!
          new fullscreen().setVisible(true);
        }
      
      }
      

      第三步:编译代码并运行

      完成。

      【讨论】:

        【解决方案5】:

        如果我是你,我会尝试让 Java 不绘制 Jframe 的边框,然后让它占据整个屏幕。

        import java.awt.GraphicsEnvironment;
        import java.awt.Rectangle;
        
        import javax.swing.JFrame;
        
        
        public class FenNoBorder extends JFrame {
        
            public FenNoBorder () {
                setUndecorated(true);
                setVisible(true);
                GraphicsEnvironment graphicsEnvironment=GraphicsEnvironment.getLocalGraphicsEnvironment();
                Rectangle maximumWindowBounds=graphicsEnvironment.getMaximumWindowBounds();
                setBounds(maximumWindowBounds);
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2018-02-15
          • 2017-04-19
          • 2014-06-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多