Java JFrame setSize无法正常工作

时间:2015-06-23 21:27:11

标签: java swing jframe

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

图片:http://imageshack.com/a/img913/7936/7ZdxvR.png

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

4 个答案:

答案 0 :(得分:1)

您的内容窗格应覆盖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);
});

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

答案 1 :(得分:0)

框架是整个窗口的大小,包括操作系统所需的标题栏。在JPanel中的JFrame中绘制内容时,如果JPanel位于标题栏下方,则(0,0)坐标位于左上角。听起来你的标题栏高于10像素,因此490作为y组件实际上是在窗外,因为JPanel的可见高度为windowHeight - titleBarHeight

答案 2 :(得分:0)

是否应该使用以下

@Override
PreferedSize()

记住preferedSize方法是超类JFrame的方法。

答案 3 :(得分:0)

这可能对你有用吗?

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