Java 如何将我的复选框放在Swing中的文本字段下?

Java 如何将我的复选框放在Swing中的文本字段下?,java,swing,Java,Swing,我有一个文本字段来表示名称,还有一个用于注册类型的组合框。接下来,我有一个复选框,但它应该在其他两个字段下面。以下是我编写的代码: public RegPanel() { //create a new panel new GridLayout(2,1); //create one of two subpanels subPanel = new JPanel(new FlowLayout()); //create a te

我有一个文本字段来表示名称,还有一个用于注册类型的组合框。接下来,我有一个复选框,但它应该在其他两个字段下面。以下是我编写的代码:

   public RegPanel()
   {
      //create a new panel
      new GridLayout(2,1);  
      //create one of two subpanels
      subPanel = new JPanel(new FlowLayout());
      //create a textfield
      regTextField = new JTextField(20);
      //create a combobox and don't let anyone add to it
      regComboBox = new JComboBox(regOptions);
      //create a border for the subpanel      
      subPanel.setBorder(BorderFactory.createTitledBorder("Registrant's Name & Type")); 
      //add regTypePanel and regBox to the panel     
      subPanel.add(regTextField);
      subPanel.add(regComboBox);
      //create a second subpanel with a flowlayout
      subPanel2 = new JPanel(new FlowLayout());
      //create a checkbox
      regCheckBox = new JCheckBox("Dinner and Keynote Speech");
      subPanel2.add(regCheckBox);
      //add the subpanels to the main panel
      add(subPanel);
      add(subPanel2);
   }
你知道我遗漏了什么吗?很抱歉布局糟糕,我不知道如何修复视图

所以我意识到我没有正确设置GridLayout,所以我把它改为“setLayout(新的GridLayout(2,1));
但是现在在我的gui上,它完全搞乱了所有其他元素的位置。

无论如何
新建GridLayout(…)
除非在
设置布局(…)
中使用它,否则什么都不做


您可以尝试使用Box.createVerticalBox()()而不是GridLayout使组件垂直对齐。

此外,您可能希望使用BorderLayout,并意识到将一个布局嵌套在另一个布局中以实现不同的效果。

在您的情况下,您使用的是

  • RegPanel(哪个布局?)
    • 子面板(流程布局)
      • regTextField
      • 注册表组合框
    • 子面板2(流程布局)
      • regCheckBox
您的主RegPanel有哪些布局?它有默认的JPanel布局(如果RegPanel是JPanel的子类),这是一个FlowLayout。因此,您的RegPanel除了显示两个子面板外,还显示这两个子面板,这看起来很像您只有一个包含所有组件的面板。因此,您的RegPanel也需要一个布局管理器-GridLayout(2,1)看起来还可以(如果您不想在两行中对齐组件)


在中,我只使用了
GroupLayout
(除了偶尔使用的一个BorderLayout)。这需要一些时间来适应(和一个包装类使代码更易于编写和阅读),但对于这样的表单内容,它似乎是理想的(仅限于内置布局管理器).

这里必须提到的是,它是一个伟大的多用途布局管理器——一旦您了解了它,它将非常灵活且易于使用