Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 格式化BoxLayout时出现问题_Java_Swing_Layout Manager_Grid Layout_Boxlayout - Fatal编程技术网

Java 格式化BoxLayout时出现问题

Java 格式化BoxLayout时出现问题,java,swing,layout-manager,grid-layout,boxlayout,Java,Swing,Layout Manager,Grid Layout,Boxlayout,我想布局6个组件,在一列中垂直对齐。此外,我希望在列中第一个组件之前有一个200像素的空格。我有以下代码: public class MongoMusicApplet extends JApplet{ //*****main menu objects******** private JPanel mainMenuPanel; private JButton buildingButton; private JTextField text; public void in

我想布局6个组件,在一列中垂直对齐。此外,我希望在列中第一个组件之前有一个200像素的空格。我有以下代码:

   public class MongoMusicApplet extends JApplet{

  //*****main menu objects********
  private JPanel mainMenuPanel;
  private JButton buildingButton;
  private JTextField text;

  public void init(){

     setLayout(new BoxLayout(getContentPane(),BoxLayout.Y_AXIS));

     mainMenuPanel=new JPanel();

     buildingButton=new JButton("Graph-Building Mode");
     text=new JTextField(20);
     JLabel label1=new JLabel("Help us improve by entering");
     JLabel label2=new JLabel("OR");
     JLabel label3=new JLabel("Enter the name of an artist");
     JLabel label4=new JLabel("to enter Discovery Mode");

     mainMenuPanel.add(Box.createRigidArea(new Dimension(0,200)));

     label1.setAlignmentX(Component.CENTER_ALIGNMENT);
     mainMenuPanel.add(label1);

     buildingButton.setAlignmentX(Component.CENTER_ALIGNMENT);
     mainMenuPanel.add(buildingButton);

     ...add all other components in this order: label 2, label3, text, label4...

     add(mainMenuPanel);
  } 
}
我得到了如下布局:

首先,createRigidArea似乎在列开始之前创建了空间,也在列中的一些组件之间创建了空间。有没有办法让它只在列中第一个组件之前创建空间


第二,既然我选择了Y_轴作为对齐方式,为什么组件没有垂直排列,每行一个组件?我还尝试使用GridLayout(0,1),但这给了我完全相同的布局。如何将这些组件强制放在一个垂直列中?

经过一些修补后,我发现我需要更改这一行:

setLayout(new BoxLayout(getContentPane(),BoxLayout.Y_AXIS));
为此:

mainMenuPanel.setLayout(new BoxLayout(mainMenuPanel,BoxLayout.Y_AXIS))
因为我将组件添加到mainMenuPanel,而不是直接添加小程序的内容窗格


这是一个愚蠢的错误,但我只是添加了这一点,以防以后有人偶然发现这一点

1)为什么要编写小程序?如果是老师指定的,请参考。2) 在源代码中只需要一行空白就可以了。
{
之后或
}
之前的空行通常也是多余的。3) 为了更快地获得更好的帮助,请发布一个(最小完整的可验证示例)或(简短、自包含、正确的示例)。在第一个组件之前使用
EmptyBorder
作为200px间隔。另请参见(Yes.)@AndrewThompson,即使删除了任何setSize方法,我仍然没有垂直堆叠组件“我仍然没有得到…”我仍然没有看到您的MCVE。。我问了你一个你忽略了的问题,我自己解决了。谢谢你的帮助