2

使用此代码,我将拥有以下窗口。我创建了 2 个面板并将 mainp 一个添加到框架中,并将面板添加到 mainp 我这样做是为了使窗口大小调整为动态的(因此面板不会根据框架调整大小)我尝试使我的默认面板大小更宽,以便文本字段和标签变得更宽,但 panel.setsize 似乎没有做任何事情。

在此处输入图像描述

// creates the labels
 studId = new JLabel("Student ID");
 studAvg = new JLabel("Student Average");
 studName = new JLabel("Student Name");

 // creates the text fields
 JTextField studIdText = new JTextField();
 JTextField studAvgText = new JTextField();
 JTextField studNameText = new JTextField();

 JPanel mainp = new JPanel();

 JPanel panel = new JPanel();
  panel.setLayout(new GridLayout(3, 2, 2, 2));

            panel.setSize(300, 100);

    // adds to the GridLayout
    panel.add(studId);
    panel.add(studIdText);
    panel.add(studName);
    panel.add(studNameText);
    panel.add(studAvg);
    panel.add(studAvgText);

    mainp.add(panel);
    add(BorderLayout.CENTER,mainp);

    // verifies the textfields
    studIdText.setInputVerifier(new IntVerifier());
    studAvgText.setInputVerifier(new DoubleVerifier());

    setTitle("Student Form");
    setSize(300, 200);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(EXIT_ON_CLOSE);

在此处输入图像描述

4

3 回答 3

3

您正在寻找的方法是setPreferredSize. 使用它代替panel.setSize(300, 100).

panel.setPreferredSize(new Dimension(300, 100));

我还建议不要将 JFrame 的大小设置为固定值 (300,200),而是这样做pack()。这将设置 JFrame 的大小以适合里面的面板。

于 2012-11-06T13:55:56.550 回答
2

使用来自@Dan 和@MADprogrammer 和@trashgod 的建议我想出了以下

JTextField studIdText = new JTextField(20);

JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
GridBagConstraints r1 = new GridBagConstraints();

r1.fill = GridBagConstraints.HORIZONTAL;
r1.weightx = 0.0;
r1.gridx = 0;
r1.gridy = 0;
panel.add(studId,r1);

r1.weightx = 0.5;
r1.gridx = 1;
r1.gridwidth = GridBagConstraints.REMAINDER; 
panel.add(studIdText,r1);

当然,您可以GridBagConstraints为每一行制作并更改gridy

在此处输入图像描述

于 2012-11-07T08:09:58.813 回答
1

将布局设置mainpBorderLayout

mainp.setLayout(new BorderLayout());

然后,为了避免文本字段垂直调整大小并看起来很奇怪,您可以添加panelBorderLayout.NORTH,例如。

mainp.add(panel, BorderLayout.NORTH);
于 2012-11-06T13:34:03.047 回答