Java 如何增加面板宽度?

Java 如何增加面板宽度?,java,swing,Java,Swing,使用此代码,我将有以下窗口。我创建了两个面板,将mainp一个添加到框架中,将面板添加到mainp我这样做是为了动态调整窗口大小(这样面板就不会调整到框架中),我尝试将默认面板大小调宽,以便文本字段和标签变宽,但panel.setsize似乎没有任何作用 // creates the labels studId = new JLabel("Student ID"); studAvg = new JLabel("Student Average"); studName = new JLabel

使用此代码,我将有以下窗口。我创建了两个面板,将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);


mainp的布局设置为
BorderLayout

mainp.setLayout(new BorderLayout());
然后,为了避免文本字段垂直调整大小并看起来很奇怪,您可以将
面板
添加到
BorderLayout.NORTH

mainp.add(panel, BorderLayout.NORTH);

您正在寻找的方法是。使用它而不是
面板。设置大小(300100)


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

使用@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


+1表示
pack()
;另请参见这些。我强烈反对在可能的情况下使用
setPreferredSize
。你已经做了一个任意的大小决定(一个简单的例子),没有考虑字体、分辨率、DPI、其他组件的插入,这些组件可能在开发机器上工作,但在部署的机器上可能不一样(垃圾神提供的链接肯定指出了其中的可能)。相反,我可能只是简单地使用一个
EmptyBorder
,它在计算出首选大小的容器顶部提供了额外的填充。。。IMHO@MadProgrammer
sing panel.setPreferredSize(新尺寸(400,50))给我一些我想要的,但就像你说的,这似乎是一个黑客行为,所以我发现使用不同的布局可能是解决方案,根据垃圾神发送的链接,我发布了图片,水平和垂直调整大小不会拉伸标签和标签fields@MichelLayyous记住,布局管理器可以忽略pref/min/maxsizes@MadProgrammer核对我的答案,告诉我你的想法。。这是我想要的更好的格式,这样做可以使我的面板水平调整大小。我希望它水平和垂直保持固定大小,而不是与框架一起拉伸。但同时我希望文本字段更宽,但我发现使用“setPreferredSize”是不好的做法使用GridBagLayout并将标签放在一列和文本上两列上的字段。
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);