在Java中最大化JFrame

时间:2016-11-05 09:05:18

标签: java windows swing jframe fullscreen

有几个与此相关的问题,例如herehere,两者都说最大化JFrame的方法是使用以下代码:

frame.setExtendedState(JFrame.MAXIMIZED_BOTH); //Some answers have these lines
frame.setVisible(true);                        //reversed

然而,对我来说,不确定这是否是一个windows 10 bug / java 8 bug,当我使用这段代码时,结果是这样的(无论上面两行代码是哪一行):

Offset <code>JFrame</code>

正如您在图像中看到的那样,窗口的大小正确,但是它略微覆盖在底部,并且略微偏离左侧。有没有办法解决这个问题,或者通过使用代码点击JFrame上的最大化按钮来实际最大化程序?

修改
这是一个证明问题的MCVE:

import java.awt.GridLayout;
import javax.swing.JFrame;

public class CDBurner extends JFrame {
    private static final long serialVersionUID = -6027473114929970648L;

    private CDBurner() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new GridLayout(1, 1));
        setExtendedState(getExtendedState() | JFrame.MAXIMIZED_BOTH);
        setVisible(true);
        setLocationRelativeTo(null);
        requestFocus();
    }

    public static void main(String[] args) {
        new CDBurner();
    }
}

1 个答案:

答案 0 :(得分:3)

该行

setLocationRelativeTo(null);

设置框架的位置。如果它出现在

之后
setExtendedState(getExtendedState() | JFrame.MAXIMIZED_BOTH);

它会在最大化后改变帧的位置,从而导致观察到的间隙。你应该删除那一行,因为最大化框架无论如何都要设置它的位置(尽管你可以在设置扩展状态之前放置它,在这种情况下它什么都不做)。