【问题标题】:JFrame in full screen Java全屏Java中的JFrame
【发布时间】:2012-07-19 04:47:03
【问题描述】:

我很快就会做一个项目,我将不得不在其中使用全屏模式。

它将在窗口中绘制一些图形。如果我使用 JFrame 或类似的东西会很方便。

我不知道屏幕的最终分辨率是多少。请告诉我图形是否会自动重新缩放?

JFrame jf = new JFrame();
jf.setSize(1650,1080);
//make it fullscreen;
//now is everything is going to be rescaled so it looks like the original?

【问题讨论】:

    标签: java swing fullscreen


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      添加:

      frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 
      frame.setUndecorated(true);
      frame.setVisible(true);
      
      【解决方案3】:

      如果您想将相框置于全屏模式(如电影全屏),请查看这些答案。

      java.awt.GraphicsEnvironmentjava.awt.GraphicsDevice 类用于将应用程序置于一个屏幕上的全屏模式(决定性)。

      例如:

      static GraphicsDevice device = GraphicsEnvironment
              .getLocalGraphicsEnvironment().getScreenDevices()[0];
      
      public static void main(String[] args) {
      
          final JFrame frame = new JFrame("Display Mode");
          frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
          frame.setUndecorated(true);
      
          JButton btn1 = new JButton("Full-Screen");
          btn1.addActionListener(new ActionListener() {
              @Override
              public void actionPerformed(ActionEvent e) {
                  device.setFullScreenWindow(frame);
              }
          });
          JButton btn2 = new JButton("Normal");
          btn2.addActionListener(new ActionListener() {
              @Override
              public void actionPerformed(ActionEvent e) {
                  device.setFullScreenWindow(null);
              }
          });
      
          JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER));
          panel.add(btn1);
          panel.add(btn2);
          frame.add(panel);
      
          frame.pack();
          frame.setVisible(true);
      
      }
      

      【讨论】:

        【解决方案4】:

        一种方法是使用扩展状态。这要求底层操作系统最大化 JFrame。

        setExtendedState(getExtendedState() | JFrame.MAXIMIZED_BOTH);
        

        其他方法是根据您的要求手动最大化屏幕。

        Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
        setBounds(100, 100, (int) dim.getWidth(), (int) dim.getHeight());
        setLocationRelativeTo(null);
        

        但这在 Ubuntu 操作系统中存在缺陷。我发现的解决方法是这样的。

        if (SystemHelper.isUnix()) {
            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(p);
                }
            });
        }
        
        Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
        setBounds(100, 100, (int) dim.getWidth(), (int) dim.getHeight());
        setLocationRelativeTo(null);
        

        在 Fedora 中不存在上述问题。但是GnomeKDE 会带来一些麻烦。所以最好小心点。希望这会有所帮助。

        【讨论】:

          【解决方案5】:

          只需使用此代码:

          import java.awt.event.*;
          import javax.swing.*;
          
          public class FullscreenJFrame extends JFrame {
              private JPanel contentPane = new JPanel();
              private JButton fullscreenButton = new JButton("Fullscreen Mode");
              private boolean Am_I_In_FullScreen = false;
              private int PrevX, PrevY, PrevWidth, PrevHeight;
          
              public static void main(String[] args) {
                  FullscreenJFrame frame = new FullscreenJFrame();
                  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                  frame.setSize(600, 500);
                  frame.setVisible(true);
              }
          
              public FullscreenJFrame() {
                  super("My FullscreenJFrame");
          
                  setContentPane(contentPane);
          
                  // From Here starts the trick
                  FullScreenEffect effect = new FullScreenEffect();
          
                  fullscreenButton.addActionListener(effect);
          
                  contentPane.add(fullscreenButton);
                  fullscreenButton.setVisible(true);
              }
          
              private class FullScreenEffect implements ActionListener {
                  @Override
                  public void actionPerformed(ActionEvent arg0) {
                      if (Am_I_In_FullScreen == false) {
                          PrevX = getX();
                          PrevY = getY();
                          PrevWidth = getWidth();
                          PrevHeight = getHeight();
          
                          // Destroys the whole JFrame but keeps organized every Component
                          // Needed if you want to use Undecorated JFrame dispose() is the
                          // reason that this trick doesn't work with videos.
                          dispose();
                          setUndecorated(true);
          
                          setBounds(0, 0, getToolkit().getScreenSize().width,
                                  getToolkit().getScreenSize().height);
                          setVisible(true);
                          Am_I_In_FullScreen = true;
                      } else {
                          setVisible(true);
                          setBounds(PrevX, PrevY, PrevWidth, PrevHeight);
                          dispose();
                          setUndecorated(false);
                          setVisible(true);
                          Am_I_In_FullScreen = false;
                      }
                  }
              }
          }
          

          我希望这会有所帮助。

          【讨论】:

            【解决方案6】:

            在下面设置 2 个属性:

            1. 扩展状态 = 6
            2. 可调整大小 = true

            它对我有用。

            【讨论】:

              【解决方案7】:

              我的意思是突出显示的值:

              【讨论】:

                【解决方案8】:

                有史以来最简单的修复:

                for ( Window w : Window.getWindows() ) {
                    GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow( w );
                }
                

                【讨论】:

                  【解决方案9】:

                  它将帮助您使用框架中的对象瞬间

                  frame.setExtendedState(JFrame.MAXIMIZED_BOTH);

                  【讨论】:

                    【解决方案10】:

                    首先,这是您要使用的分辨率,1650,1080

                    现在添加:

                    frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 
                    

                    如果您对 JFrame 上的组件有疑问,则在使用 frame.add(component) 方法添加所有组件后,添加以下语句。

                    frame.pack();
                    

                    【讨论】:

                      【解决方案11】:

                      你只需要这个:

                      JFrame frame = new JFrame();
                      frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
                      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                      frame.setVisible(true);
                      

                      当您使用 MAXIMIZED_BOTH 修饰符时,它将在整个窗口(高度和宽度)处一直保持最大值。

                      有人建议使用这个:

                      frame.setUndecorated(true);
                      

                      我不会推荐它,因为你的窗口没有标题,因此没有关闭/恢复/最小化按钮。

                      【讨论】:

                        【解决方案12】:
                        JFrame frame = new JFrame();
                        frame.setPreferredSize(new Dimension(Toolkit.getDefaultToolkit().getScreenSize()));
                        

                        这只是使框架成为屏幕的大小

                        【讨论】:

                          【解决方案13】:

                          您可以使用属性工具。
                          为您的 JFrame 设置 2 个属性:

                          extendedState 6
                          resizeable    true
                          

                          【讨论】:

                            【解决方案14】:

                            你可以这样做 -

                            public void FullScreen() {
                                    if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) {
                                        final View v = this.activity.getWindow().getDecorView();
                                        v.setSystemUiVisibility(8);
                                    }
                                    else if (Build.VERSION.SDK_INT >= 19) {
                                        final View decorView = this.activity.getWindow().getDecorView();
                                        final int uiOptions = 4102;
                                        decorView.setSystemUiVisibility(uiOptions);
                                    }
                                }
                            

                            【讨论】:

                              猜你喜欢
                              • 1970-01-01
                              • 1970-01-01
                              • 2012-03-27
                              • 1970-01-01
                              • 2012-02-16
                              • 1970-01-01
                              • 2018-03-29
                              • 1970-01-01
                              • 1970-01-01
                              相关资源
                              最近更新 更多