代码之家  ›  专栏  ›  技术社区  ›  Nope

JFrame最大化窗口

  •  80
  • Nope  · 技术社区  · 17 年前

    7 回复  |  直到 10 年前
        1
  •  140
  •   kgiannakakis    15 年前

    如果您正在扩展JFrame:

    public void run() {
        MyFrame myFrame = new MyFrame();
        myFrame.setVisible(true);
        myFrame.setExtendedState(myFrame.getExtendedState() | JFrame.MAXIMIZED_BOTH);
    }
    
        2
  •  18
  •   VonC    17 年前

    差不多 this.setExtendedState(this.getExtendedState() | this.MAXIMIZED_BOTH);

    import java.awt.*;
    import javax.swing.*;
    
    public class Test extends JFrame
    {
        public Test()
        {
            GraphicsEnvironment env =
    GraphicsEnvironment.getLocalGraphicsEnvironment();
            this.setMaximizedBounds(env.getMaximumWindowBounds());
            this.setExtendedState(this.getExtendedState() | this.MAXIMIZED_BOTH);
        }
    
        public static void main(String[] args)
        {
            JFrame.setDefaultLookAndFeelDecorated(true);
    
            Test t = new Test();
            t.setVisible(true);
        }
    }
    
        3
  •  15
  •   TT.    6 年前

    如果您使用的是JFrame,请尝试以下方法

    JFrame frame = new JFrame();
    //...
    frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
    
        4
  •  7
  •   Zach Scrivena    17 年前
        5
  •  2
  •   stealthyninja michkra    14 年前

    我喜欢这个版本:

    import java.awt.Dimension;
    import java.awt.GraphicsConfiguration;
    import java.awt.Toolkit;
    import javax.swing.JFrame;
    
    public class Test
    {
        public static void main(String [] args)
        {
            final JFrame frame = new JFrame();
            final GraphicsConfiguration config = frame.getGraphicsConfiguration();
    
            final int left = Toolkit.getDefaultToolkit().getScreenInsets(config).left;
            final int right = Toolkit.getDefaultToolkit().getScreenInsets(config).right;
            final int top = Toolkit.getDefaultToolkit().getScreenInsets(config).top;
            final int bottom = Toolkit.getDefaultToolkit().getScreenInsets(config).bottom;
    
            final Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
            final int width = screenSize.width - left - right;
            final int height = screenSize.height - top - bottom;
    
            frame.setResizable(false);
            frame.setSize(width,height);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);       
            frame.setVisible(true);
        }
    }
    
        6
  •  2
  •   Khaled.K    7 年前

    将JFrame设置为全屏的方法是 MAXIMIZED_BOTH MAXIMIZED_VERT | MAXIMIZED_HORIZ ,分别将框架设置为垂直和水平最大化

    package Example;
    import java.awt.GraphicsConfiguration;
    import javax.swing.JFrame;
    import javax.swing.JButton;
    
    public class JFrameExample
    {
        static JFrame frame;
        static GraphicsConfiguration gc;
        public static void main(String[] args)
        {
            frame = new JFrame(gc);
            frame.setTitle("Full Screen Example");
            frame.setExtendedState(MAXIMIZED_BOTH);
    
            JButton button = new JButton("exit");
            b.addActionListener(new ActionListener(){@Override
            public void actionPerformed(ActionEvent arg0){
                JFrameExample.frame.dispose();
                System.exit(0);
            }});
    
            frame.add(button);
            frame.setVisible(true);
        }
    }
    
        7
  •  2
  •   TT.    6 年前

    here ,但只是打电话 setExtendedState(getExtendedState()|Frame.MAXIMIZED_BOTH); 刚打过电话 setVisible(true); 显然不适用于我的环境(Windows 10、JDK 1.8,我的任务栏在屏幕的右侧)。这样做仍然会在左侧、右侧和底部留下很小的空间。

    然而,对我有效的是打电话 setExtendedState(... 当窗口被激活时,如下所示:

    public class SomeFrame extends JFrame {
    
        public SomeFrame() {
            // ...
            setVisible(true);
            setResizable(true);
            // if you are calling setSize() for fallback size, do that here
            addWindowListener (
                new WindowAdapter() {
                    private boolean shown = false;
                    @Override
                    public void windowActivated(WindowEvent we) {
                        if(shown) return;
                        shown = true;
                        setExtendedState(getExtendedState()|JFrame.MAXIMIZED_BOTH);
                    }
                }
            );
        }
    }
    
        8
  •  0
  •   Wouter    11 年前

    我最终使用了以下代码:

    public void setMaximized(boolean maximized){
        if(maximized){
            DisplayMode mode = this.getGraphicsConfiguration().getDevice().getDisplayMode();
            Insets insets = Toolkit.getDefaultToolkit().getScreenInsets(this.getGraphicsConfiguration());
            this.setMaximizedBounds(new Rectangle(
                    mode.getWidth() - insets.right - insets.left, 
                    mode.getHeight() - insets.top - insets.bottom
            ));
            this.setExtendedState(this.getExtendedState() | JFrame.MAXIMIZED_BOTH);
        }else{
            this.setExtendedState(JFrame.NORMAL);
        }
    }
    

    此选项是所有选项中效果最好的,包括多监视器支持。唯一的缺陷是所有监视器上都使用了任务栏偏移量,这是一些配置。

        9
  •  0
  •   Alexander Shkirkov    6 年前

    @Kgiannakaki的答案完全正确,但如果有人陷入这个问题并使用 爪哇6 在…上 Linux (举例来说,薄荷19肉桂), 最大化两者 国家有时不适用。

    你可以试着打电话 pack() 方法设置此状态之后。

    代码示例:

    public MainFrame() {
        setContentPane(contentPanel); //some JPanel is here
        setPreferredSize(new Dimension(1200, 800));
        setMinimumSize(new Dimension(1200, 800));
        setSize(new Dimension(1200, 800));
        setExtendedState(JFrame.MAXIMIZED_BOTH);
        pack();
    }
    

    如果您在Windows上使用Java 7+或Java 6,则不需要这样做。