2015-03-30 153 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)); 

本。

這是一個愚蠢的錯誤,但我只是將這種的情況下,任何人都絆倒在此之後