为什么setSize不能在Java中工作

时间:2014-03-27 00:37:23

标签: java swing user-interface

我正在尝试打开一个包含特定WINDOW_WIDTHWINDOW_HEIGHT的窗口。

/**
 * Program to calculate a tip based on a restaurant bill
 * @author Nick Gilbert
 */
import javax.swing.*;
import java.awt.*;
public class TipCalculator extends JFrame {
    private JFrame frame1;
    private JLabel label1;
    private JPanel panel1;
    private JTextField askBill;
    private final int WINDOW_WIDTH = 400;   // Window width
    private final int WINDOW_HEIGHT = 300;  // Window height

    /**
     * Constructor
     */
    public TipCalculator(){
        setTitle("Tip Calculator!");
        setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());
        panel1 = new JPanel();
        label1 = new JLabel("Enter bill:");
        askBill = new JTextField(10);

        panel1.add(label1);
        panel1.add(askBill);
        add(panel1, BorderLayout.NORTH);

        pack();
        setVisible(true);
    }
    public static void main(String[] args) {
        new TipCalculator();
    }
}

然而,当我运行它时,我用setSize方法指定的宽度和高度没有效果,我不明白为什么

1 个答案:

答案 0 :(得分:1)

您正在致电pack

setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
//...
pack();

来自JavaDocs ...

  

public void pack()
使这个窗口的大小适合   其子组件的首选大小和布局。得到的宽度   如果有的话,窗口的高度会自动放大   尺寸小于前面指定的最小尺寸   调用setMinimumSize方法。

如果窗口和/或其中   所有者尚不可显示,两者都可显示   在计算首选大小之前。窗口经过验证   它的大小正在计算中。

这实际上是调整窗口大小的首选方法,因为它考虑了平台之间的差异。这也意味着窗口的可视空间(窗口边界内的区域)与其内容的首选大小相匹配。

调用setSize会使寡妇的大小变大,这意味着内容将是指定的大小 - 窗口边框,不同的外观和平台会有所不同。