你如何增加面板宽度?

时间:2012-11-06 13:29:52

标签: java swing

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

enter image description here

// 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);

enter image description here

3 个答案:

答案 0 :(得分:3)

您要查找的方法是setPreferredSize。使用它而不是panel.setSize(300, 100)

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

我还建议不要将JFrame的大小设置为固定值(300,200),而是改为pack()。这将设置JFrame的大小以适应内部的面板。

答案 1 :(得分:2)

使用来自@Dan和@MADprogrammer以及@trashgod的Advise我想出了以下内容

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

enter image description here

答案 2 :(得分:1)

mainp的布局设置为BorderLayout

mainp.setLayout(new BorderLayout());

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

mainp.add(panel, BorderLayout.NORTH);