2013-03-27 59 views
-4

我有一個jframe包含三個文本字段和兩個單選按鈕(用於選擇是或否)。GUI表單手工創建

它應該是這樣的: enter image description here

但是,我的代碼,它是這樣的: enter image description here

我的代碼:

public class editFrame extends JFrame { 

JButton saveButton; 
JButton cancelButton; 
JRadioButton radioB1; 
JRadioButton radioB2; 

public editFrame() { 

    JPanel wrapper = new JPanel(); 
    wrapper.add(createForm()); 
    add(wrapper, BorderLayout.WEST); 

    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    this.setBounds(100, 50, 500, 600); 
    this.setVisible(true); 
} 

public JPanel createForm() { 
    String[] labels = {"ID", "Name", "Date"}; 
    JPanel panel = new JPanel(); 

    JTextField idtf = new JTextField(10); 
    JTextField nametf = new JTextField(10); 
    JTextField datetf = new JTextField(10); 
    panel.add(idtf); 
    panel.add(nametf); 
    panel.add(datetf); 

    radioB1 = new JRadioButton("Yes"); 
    radioB2 = new JRadioButton("No"); 
    ButtonGroup group = new ButtonGroup(); 
    group.add(radioB1); 
    group.add(radioB2); 
    panel.add(radioB1); 
    panel.add(radioB2); 
    saveButton = new JButton("update"); 
    cancelButton = new JButton("Cancel"); 
    panel.add(saveButton); 
    panel.add(cancelButton); 

    SpringLayout sL = new SpringLayout(); 
    panel.setLayout(sL); 
    SpringUtilities.makeCompactGrid(panel, 3, 2, 100, 50, 15, 20); 

    return panel; 
} 

public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      editFrame edF = new editFrame(); 
     } 
    }); 
} 

} 借用狀態文本不在收音機按鈕旁顯示。 我的第二個主要問題是,使用此代碼,我無法訪問文本字段。 我稍後需要訪問文本字段...

+2

如果您使用Netbeans IDE,那麼它允許擺動應用程序的視覺設計 – Abubakkar 2013-03-27 16:48:12

+0

@Abu你能解釋更多嗎? – Sajad 2013-03-27 16:49:52

+0

您使用任何IDE進行開發 – Abubakkar 2013-03-27 16:51:38

回答

3

首先,收音機標籤未顯示,因爲您不創建它並將其添加到面板。在radioB1之前創建它並將其添加到面板。另外,你應該在radioB2之前添加一些不可見的(empy)標籤(或者使用一些其他填充組件填充單元格 - 也許這可能有助於:http://docs.oracle.com/javase/tutorial/uiswing/layout/box.html#filler)。

此外,您可以添加另一個填充組件到面板而不是saveButton。然後我會創建另一個面板(buttonPane),它將包含保存和取消按鈕,並將此buttonPane添加到主面板而不是cancelButton。按鈕面板可以使用BoxLayout,而按鈕之間可以使用水平膠水(如上圖所示)。

應該是這樣。但這裏有一個警告。您正在以這種方式在循環中創建JTextField,以至於您以後無法引用它們,即。當你需要得到的文字。您應該將其引用保存爲單個變量,或者將它們添加到數組中,以便在按下更新按鈕時可以獲取這些值。