2012-09-04 147 views
5

我正在使用Java Swing編寫eclipse中的聯繫人列表應用程序。 如何獲得僅包含列和行的簡單表格佈局? 我不想要行或列標籤。創建聯繫人列表程序

事情是這樣的:

first name: john 
middle name: franklin 
last name: doe 

凡的名字將是可編輯的文本框等

有什麼用最好的成分?

我還會在文本字段下方有按鈕。 目前我有一個JFrame這是正確運行。它拉起了一個窗口,我的菜單選項正確。但是當我嘗試這樣做時:

myFrame.setLayout(new GridLayout(6, 2)); 

我收到一個錯誤。我想有一個兩列和5行(可能是6)的網格佈局。 我想在左列上有一個標籤,在右列上有一個文本框。 然後在底部的兩個按鈕居中。

回答

4

您最好將字段和控件(按鈕)分爲不同的面板,這樣可以爲每個面板提供不同的佈局管理器。

我會從一個基地JPanel開始使用BorderLayout

爲此,我將在CENTER位置添加「字段」面板,並在SOUTH位置添加控件(按鈕)。

對於場,我會使用一個GridBagLayout,但我很挑剔像,併爲控制面板我可能會使用一個FlowLayout(除非你有機會獲得一個不錯的ButtonLayout經理;))

這意味着你可以用一些落得像

enter image description here

使用代碼樣本來更新

public class FormPanel extends JPanel { 

    private JTextField fldFirstName; 
    private JTextField fldMiddleName; 
    private JTextField fldLastName; 
    private JTextField fldDateOfBirth; 
    private JTextField fldEMail; 
    private JButton okButton; 
    private JButton cancelButton; 

    public FormPanel() { 

     setLayout(new BorderLayout()); 
     add(createFieldsPane()); 
     add(createButtonsPane(), BorderLayout.SOUTH); 

    } 

    public JPanel createButtonsPane() { 

     JPanel panel = new JPanel(new FlowLayout()); 
     panel.add((okButton = createButton("Ok"))); 
     panel.add((cancelButton = createButton("Cancel"))); 

     return panel; 

    } 

    protected JButton createButton(String text) { 

     return new JButton(text); 

    } 

    public JPanel createFieldsPane() { 

     JPanel panel = new JPanel(new GridBagLayout()); 
     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.insets = new Insets(2, 2, 2, 2); 
     gbc.gridx = 0; 
     gbc.gridy = 0; 
     gbc.anchor = GridBagConstraints.WEST; 

     panel.add(createLabel("First Name:"), gbc); 
     gbc.gridy++; 
     panel.add(createLabel("Middle Name:"), gbc); 
     gbc.gridy++; 
     panel.add(createLabel("Last Name:"), gbc); 
     gbc.gridy++; 
     panel.add(createLabel("Date of Birth:"), gbc); 
     gbc.gridy++; 
     panel.add(createLabel("EMail:"), gbc); 

     gbc.gridy = 0; 
     gbc.gridx++; 
     gbc.weightx = 1; 
     panel.add((fldFirstName = createField()), gbc); 
     gbc.gridy++; 
     panel.add((fldLastName = createField()), gbc); 
     gbc.gridy++; 
     panel.add((fldMiddleName = createField()), gbc); 
     gbc.gridy++; 
     panel.add((fldDateOfBirth = createField()), gbc); 
     gbc.gridy++; 
     panel.add((fldEMail = createField()), gbc); 

     JPanel filler = new JPanel(); 
     filler.setOpaque(false); 

     gbc.gridy++; 
     gbc.weightx = 1; 
     gbc.weighty = 1; 
     panel.add(filler, gbc); 

     return panel; 

    } 

    protected JLabel createLabel(String text) { 

     return new JLabel(text); 

    } 

    protected JTextField createField() { 

     JTextField field = new JTextField(12); 
     return field; 

    } 

} 
+0

另請參閱(受到嚴重譴責的)'GroupLayout'。 –

+0

對於窗體我的投票去(一如既往)的JGoodies的FormLayout – Robin

+0

沒有人的建議MigLayout? – MadProgrammer