2013-03-27 60 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,以至于您以后无法引用它们,即。当你需要得到的文字。您应该将其引用保存为单个变量,或者将它们添加到数组中,以便在按下更新按钮时可以获取这些值。