Java JFrame最大化窗口

Java JFrame最大化窗口,java,swing,maximize-window,Java,Swing,Maximize Window,我正在使用swing制作一个快速而肮脏的动画。我希望窗口最大化。我该怎么做呢?如果你使用的是JFrame,试试这个 JFrame frame = new JFrame(); //... frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 怎么样?类似于this.setExtendedState(this.getExtendedState()| this.MAXIMIZED_两者) 将JFrame设置为全屏的方法是设置选项,该选项代表最大化垂直|最大化水

我正在使用swing制作一个快速而肮脏的动画。我希望窗口最大化。我该怎么做呢?

如果你使用的是JFrame,试试这个

JFrame frame = new JFrame();
//...
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);

怎么样?

类似于
this.setExtendedState(this.getExtendedState()| this.MAXIMIZED_两者)


将JFrame设置为全屏的方法是设置选项,该选项代表
最大化垂直|最大化水平
,分别将框架设置为垂直和水平最大化

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);
    }
}

如果您正在扩展JFrame:

public void run() {
    MyFrame myFrame = new MyFrame();
    myFrame.setVisible(true);
    myFrame.setExtendedState(myFrame.getExtendedState() | JFrame.MAXIMIZED_BOTH);
}
我喜欢这个版本:

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);
    }
}

我最终使用了以下代码:

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);
    }
}

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

我在这个线程和其他线程中尝试了解决方案,但只需调用
setExtendedState(getExtendedState()| Frame.MAXIMIZED_两者)setVisible(true)后立即调用code>显然不适用于我的环境(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);
                }
            }
        );
    }
}

@Kgiannakaki的答案完全正确,但如果有人陷入这个问题,并在Linux上使用Java6(例如,Mint19肉桂),两种状态的最大化有时都不适用

设置此状态后,可以尝试调用方法

代码示例:

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,这是不必要的。

通过实例访问静态字段是一种不好的做法。请使用
JFrame。将两者最大化。
取而代之。巨大、巨大的错误和上述问题!(好吧,很好,没有重大后果的轻微警告…)应该是Frame.MAXIMIZED\u BOTH而不是JFrame.MAXIMIZED\u BOTH!:)为什么要先调用setVisible(true)?这有意义吗?如果没有(ubuntu),它也可以正常工作。如果没有
setVisible(true)
首先,框架的大小不正确。我在
setExtendedState()
之前和之后都尝试过它,而且
setVisible()
必须是第一个。@Crusader实际上在这里完全没有问题,因为两者都引用相同的常量字段(
JFrame
继承自
Frame
)。这个
是干什么用的?它做一个,如果失败,它做另一个?或者您是在指示程序员的选择(即,在此调用中选择A | B中的一个?)我以前没有见过这种语法。@Pureferret它是“按位包含或”运算符,如果位存在于任一操作数中,它会复制位。(或者)我喜欢这个版本。非常感谢。我在Windows 10上遇到了一个类似的问题,任务栏在屏幕底部。窗口太高,因此与任务栏重叠。你的解决方案奏效了!
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();
}