Java JFrame setSize 无法正常工作

Java JFrame setSize doesn`t work properly

我正在制作一个大小为 500x500 像素的 JFrame。 我制作了一个蓝色背景,并在右下角从 (490,490) 到 (500,500) 添加了一个红色方块。

图片:

我在屏幕上没有看到红色方块。 我将框架从不可调整大小切换为可调整大小,如果我使 window 变大,红点就在那里。 帧大小是否与应用程序的 window 大小相同? 我怎样才能使应用程序的 window 正好是 500x500?

框架是整个 window 的大小,包括 OS 所需的标题栏。在 JFrame 中的 JPanel 中绘制内容时,如果 JPanel 中的 (0, 0) 坐标位于左上角,则从标题栏正下方开始。听起来你的标题栏比 10 像素高,所以 490 作为 y 分量实际上不在 window,因为 JPanel 的可见高度是 windowHeight - titleBarHeight

您的内容窗格应覆盖 getPreferredSize() 方法,返回宽度和高度均为 500 像素的 Dimension 对象:

public class MyContentPane extends JPanel {
    private Dimension dimension;

    public MyContentPane() {
        this.dimension = new Dimension(500, 500);
    }

    @Override
    public Dimension getPreferredSize() {
        return this.dimension;
    }
}

// How to use your new class
SwingUtils.invokeLater(() -> {
    JFrame frame = new JFrame("Title");
    frame.setContentPane(new MyContentPane());
    frame.pack();
    frame.setVisible(true);
});

Swing 将考虑其中组件的首选大小来计算 JFrame 的大小。

应该使用以下内容

@Override
PreferedSize()

记住 preferedSize 方法是超级 class JFrame 的方法。

这可能对您有用?

        JPanel aa = new JPanel(new GridBagLayout());
        aa.setMaximumSize(new Dimension(500,500));
        aa.setMinimumSize(new Dimension(490,490));
        aa.setBorder(BorderFactory.createLineBorder(Color.black));