2013-08-04 151 views
1

我有一个垂直BoxLayout的JPanel,对于一个我希望能够使用另一个将水平放置元素的BoxLayout的元素。 该代码会解释我想要做的事:布局里面布局

private void prepareGUI() { 
    setBorder(new EmptyBorder(20, 0, 20, 0)); 
    setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); 

    JLabel lblTitle = new JLabel("Downloading"); 
    lblTitle.setFont(new Font("Arial", Font.PLAIN, 20)); 
    lblTitle.setAlignmentX(Component.CENTER_ALIGNMENT); 

    add(lblTitle); 

    Component verticalStrut = Box.createVerticalStrut(20); 
    add(verticalStrut); 

    JProgressBar progressBar = new JProgressBar(); 
    progressBar.setStringPainted(true); 
    progressBar.setBorder(null); 
    progressBar.setValue(50); 

    Dimension size = new Dimension(300, 25); 
    progressBar.setMinimumSize(size); 
    progressBar.setMaximumSize(size); 
    progressBar.setPreferredSize(size); 
    add(progressBar); 

    BoxLayout textLayout = new BoxLayout(this, BoxLayout.Y_AXIS); 

    JLabel lblTest_1 = new JLabel("Test 1!"); 
    textLayout.add(lblTest_1); 

    JLabel lblTest_2 = new JLabel("Test 2!"); 
    textLayout.add(lblTest_2); 

    add(textLayout); 
} 

现在很明显,这是不可能的,因为BoxLayout的是不是一个容器(它甚至还要求提供容器被挂在建设 我。问题是什么是最好的方法来实现我想要的?我应该创建另一个JPanel并把它放在第一个JPanel中吗?我在想,但它看起来有些复杂,必须有一个更简单的方法吗?

+2

最好的办法 - 就是拿铅笔和纸画出来。 –

+0

as a aside:[不要使用setXXSize,ever](http://stackoverflow.com/a/7229519/203657) – kleopatra

回答

3

BoxLayout不是一个容器,它是一个LayoutManager,因此,组件不能被添加到BoxLayout,因为框布局不会继承抽象类Component,这将增加像JPanel或框架集装箱一些容器....

所以,这是错误的说法:

textLayout.add(lblTest_1); 

甚至

因为这个方法就将此组件到框架的容器,并且BoxLayout不是组件。


我应该创建另一个JPanel并把第一的JPanel里面?

除非你做了什么,避免null布局,你可以自由地做任何事情,因为,设计是在给你,如果想就我宁愿多个面板。