Java и макет - PullRequest
       28

Java и макет

4 голосов
/ 09 января 2012

Я хочу использовать JPanels как контейнеры сверху вниз, как теги DIV при создании веб-страницы? Если я использую BorderLayout, у меня может быть только два (СЕВЕР и ЮГ)?

Я хочу разместить разные JButtons, JLabels и JTextFields в каждой JPanels. Это макет, который я пытаюсь сделать:

Контейнер1 и его содержимое

Контейнер2 и его содержимое

Контейнер3 и его содержимое

Спасибо за помощь.

РЕДАКТИРОВАТЬ: я добавил некоторую часть своего кода, потому что я не уверен, что я делаю это правильно?

JPanel container1, container2, container3;
container1 = new JPanel();
container2 = new JPanel();
container3 = new JPanel();

container1.setLayout(new BoxLayout(container1, BoxLayout.Y_AXIS));
container2.setLayout(new BoxLayout(container2, BoxLayout.Y_AXIS));
container3.setLayout(new BoxLayout(container3, BoxLayout.Y_AXIS));

// lägg till komponenter till containers
container1.add(button1);
container2.add(button2);
container3.add(button3);

// lägg till containers till fönster
frame.add(container1);
frame.add(container2);
frame.add(container3);

Ответы [ 3 ]

4 голосов
/ 09 января 2012

Звучит так, будто вы хотите менеджер макетов BoxLayout. Этот конкретный менеджер компоновки делает вертикальное наложение компонентов довольно простым.

2 голосов
/ 09 января 2012

Вы можете использовать GridLayout для этого, когда вы установите количество столбцов равным 1.
Существует также BoxLayout , который должен давать этот эффект при использованииориентации PAGE_LAYOUT или Y_AXIS.

Вот пример кода для BoxLayout:

Container container = frame.getContentPane( );
frame.setLayout( new BoxLayout( container, BoxLayout.Y_AXIS ) );

JPanel panel1 = new JPanel( );
panel1.add( new JButton( "Button #1" ) );
frame.add( panel1 );

JPanel panel2 = new JPanel( );
panel2.add( new JLabel("Label #1") );
frame.add( panel2 );

Обратите внимание, что макет устанавливается на панели содержимого кадра, а не непосредственно на кадре.Если вы попытаетесь установить BoxLayout на JFrame напрямую, вы получите ошибку «BoxLayout не может быть разделен».

1 голос
/ 09 января 2012

Поведение элементов веб-страницы во многом похоже на то, что делает FlowLayout: показывать все подряд (по горизонтали или вертикали) и перетекать в несколько рядов, если не хватает места. Если вы хотите, чтобы договоренность была исправлена, используйте BoxLayout.

Но учтите, что если вы вложите менеджеры компоновки, все может стать немного сложнее. Вот статья , которая хорошо объясняет это .

...