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));
我正在制作一个大小为 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));