2015-03-30 3 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-апплеты] (http://programmers.blogoverflow.com/2013/05/why-cs-teachers-should -stop-учебно-ява-апплеты /). 2) Единственная пустая строка пробела в исходном коде - это все, что требуется *. Пустые строки после '{' или before '}' также типично избыточны. 3) Чтобы лучше помочь, опубликуйте [MCVE] (http://stackoverflow.com/help/mcve) (минимальный полный проверяемый пример) или [SSCCE] (http://www.sscce.org/) (Short, Самостоятельный, правильный пример). –

+0

Используйте «EmptyBorder» для зазора 200px перед первым компонентом. И см. Также [Следует ли мне избегать использования методов Set (Preferred | Maximum | Minimum) в Java Swing?] (Http://stackoverflow.com/q/7229226/418556) (Да.) –

+0

@AndrewThompson, даже с любые методы setSize удалены, я до сих пор не получаю компоненты вертикально сложенными – user50210

ответ

0

После некоторых мастерить я узнал, что мне нужно изменить эту строку:

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

к этому:

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

, поскольку я добавляю компоненты к mainMenuPanel, а не содержимое панели апплета непосредственно ,

Это была глупая ошибка, но я просто добавив это в случае, если кто-нибудь натыкается на этом позже