2013-08-04 39 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佈局,你可以自由地做任何事情,因爲,設計是在給你,如果想就我寧願多個面板。