2015-03-30 57 views
-1

我想布局6个组件,垂直对齐在一列中。另外,我想在列中的第一个组件之前有一个200像素的空白区域。我有以下代码:问题格式BoxLayout

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

1)为什么代码的小程序?如果是由于老师指定它,请将它们转介给[为什么CS教师应该**停止**教Java applets](http://programmers.blogoverflow.com/2013/05/why-cs-teachers-should -stop教学-java的小应用程序/)。 2)源代码中的单个空白行是所有需要的。 '{'之后或'}'之前的空行通常也是多余的。 3)为了更快地获得更好的帮助,请发布[MCVE](http://stackoverflow.com/help/mcve)(最小完整可验证示例)或[SSCCE](http://www.sscce.org/)(简称,自包含,正确的例子)。 – 2015-03-31 04:59:28

+0

在第一个组件之前为空白边距200px使用一个EmptyBorder。另请参阅[我是否应避免使用Java Swing中的set(Preferred | Maximum | Minimum)大小方法?](http://stackoverflow.com/q/7229226/418556)(是) – 2015-03-31 05:00:31

+0

@AndrewThompson,即使任何setSize方法删除,我仍然没有得到组件垂直堆叠 – user50210 2015-03-31 16:45:18

回答

0

经过一番摆弄我发现我需要改变这一行:直接

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

,因为我加入组件到mainMenuPanel,而不是applet的内容窗格:

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

本。

这是一个愚蠢的错误,但我只是将这种的情况下,任何人都绊倒在此之后