使用此代码,我将有以下窗口。我创建了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);
答案 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
答案 2 :(得分:1)
将mainp
的布局设置为BorderLayout
。
mainp.setLayout(new BorderLayout());
然后,为了避免文本字段垂直调整大小并且看起来很奇怪,您可以将panel
添加到BorderLayout.NORTH
,例如。
mainp.add(panel, BorderLayout.NORTH);