Java - 面板与框架的大小相同

时间:2014-04-25 12:12:30

标签: java swing

我是Java的新手,我正在尝试编写我的第一个程序..

但是我已经遇到了第一个问题,我似乎无法在谷歌找到答案。

我在其中制作了一个JFrame和一个JPanel。

我希望面板具有特定的尺寸,但是当我尝试设置面板的尺寸时,它不起作用,并且面板恰好适合框架的大小。

package proj;

import javax.swing.*;
import java.awt.*;

class Program {
    Program() {
        JFrame frame = new JFrame("Mit program");
        frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.setSize(600, 400);
        frame.setResizable(false);

        JPanel panel = new JPanel();
        panel.setVisible(true);
        panel.setSize(100,100); // <- Why doesn't this work?
        panel.setBorder(BorderFactory.createLineBorder(Color.black));
        frame.add(panel);
    }
}

public class Proj {
    public static void main(String[] args) {
        new Program();
    }
}

3 个答案:

答案 0 :(得分:1)

切勿使用panel.setSize(100,100);代替panel.setPreferredSize(100,100); setSize也应该在setVisible方法之后。

答案 1 :(得分:1)

不要像其他答案所暗示的那样担心设置尺寸甚至设置首选尺寸(除非您正在进行自定义绘画,在这种情况下,您要覆盖{{1而不是getPreferredSize())。

您应该使用布局管理器来为您调整大小和布局组件。当您向面板添加组件时,面板的首选大小将由您来处理。

同样在您当前的情况下,该框架具有默认setPreferredSize(),其中尊重首选尺寸,因此即使BorderLayout也无法工作,因为你设置了框架的大小。

答案 2 :(得分:0)

您可以像这样设置首选尺寸

panel.setPreferredSize(new Dimension(100, 100));
frame.add(panel);
frame.pack();

这是因为大多数时候大小都是由布局管理器决定的。还要添加包功能。

理想情况下,您应该使用布局管理器来实现此目的。 http://docs.oracle.com/javase/tutorial/uiswing/layout/using.html#sizealignment