2012-11-06 60 views
2

使用此代碼,我將有以下窗口。我創建了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

回答

2

我想出了以下

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

+1

我願意與 – MadProgrammer

1

mainp作爲BorderLayout設置佈局。

mainp.setLayout(new BorderLayout()); 

然後,爲了避免使文本框垂直調整和看起來很奇怪,你可以添加到panelBorderLayout.NORTH,例如。

mainp.add(panel, BorderLayout.NORTH); 
+0

這樣做會使我的面板水平調整大小,我希望它保持水平和垂直方向的固定大小,而不是與框架一起伸展。但同時我希望我的Textfields更寬,但是我發現使用'setPre ferredSize'是不好的做法 – Meesh

+0

使用GridBagLayout並將標籤放置在一列上,將文本字段放在兩列上。 –

+0

謝謝你,我會這麼做 – Meesh

3

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

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

我也建議你JFrame的大小不是設置爲固定值(300,200),但這樣做反而pack()。這將設置JFrame的大小以適應面板內部。利用@丹和@MADprogrammer和@trashgod建議

+0

用於'pack()'的+1;另請參閱這些[注意事項](http://stackoverflow.com/q/7229226/230513)。 – trashgod

+0

如果可能,我強烈勸阻使用'setPreferredSize'。您已經(所有這些都是一個簡單的例子)大小的任意決定,而不考慮字體,分辨率,DPI,可能在開發機器上工作的其他組件的插入,但可能在部署的機器上看起來不一樣(我可以肯定它是由Trashgod提供的鏈接指向的)。相反,我可能會簡單地使用一個'EmptyBorder',它提供了額外的填充容器的頂部計算首選大小...恕我直言 – MadProgrammer

+0

@MadProgrammer'唱panel.setPreferredSize(新維(400,50));'讓我排序我想要的但是就像你說的那樣似乎是一個黑客,所以我想通過使用不同的佈局可能是解決方案根據鏈接垃圾郵件發送我張貼圖像和調整水平和垂直不會伸展標籤和字段 – Meesh