麻烦格式化BoxLayout

时间:2015-03-30 22:19:44

标签: 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 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);
  } 
}

我得到以下布局: enter image description here

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

第二,由于我选择对齐为Y_AXIS,为什么组件没有垂直排列,每行一个组件?我也尝试使用GridLayout(0,1),但这给了我完全相同的布局。如何将这些组件强制插入一个垂直列?

1 个答案:

答案 0 :(得分:0)

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

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

到此:

mainMenuPanel.setLayout(new BoxLayout(mainMenuPanel,BoxLayout.Y_AXIS))

因为我将组件添加到mainMenuPanel,而不是直接添加到applet的内容窗格。

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