2010-03-31 2 views
5

Есть ли способ использовать более одного менеджера макетов в Java. Прямо сейчас я использую gridLayout для реализации шахматной доски, но под ней я хотел бы добавить некоторые другие вещи, но не в gridLayout. Возможно, FlowLayout или какой-то другой макет. Как мне это сделать? Спасибо!Несколько менеджеров макетов в Java

ответ

6

Есть ли способ использовать более 1 макета менеджер на Java.

Абсолютно. Фактически, использование нескольких менеджеров макетов является нормой.

Как бы я это сделал?

Подкласс Container может содержать LayoutManager и содержать дочерние элементы. И каждый из этих дочерних элементов сам может быть Container с детьми. Наиболее часто используемый контейнер ниже кадров верхнего уровня - JPanel.

Для примера, вы, вероятно, следует использовать BorderLayout для рамы, положить JPanel с сеткой в ​​центральном положении (потому что это тот, который получает все доступное остающееся пространство, когда другие позиции были даны свои предпочтительные размеры) и еще JPanel с «другим материалом» в позиции SOUTH.

Подробнее можно найти на странице Swing tutorial on layout managers.

7

Да, все, что вам нужно планировать ваш над всеми UI Layout (т.е., окна, мастер панели и т.д.)

Например, вам нужно положить что-то под шахматной доской, я обычно идти с BorderLayout в базовый уровень.

Так что предположим, что у меня есть JPanel под названием masterPanel, который содержит все компоненты для моего шахматного приложения. Таким образом, код будет выглядеть так:

JPanel masterPanel = new JPanel(new BorderLayout()); 
JPanel chessBoardPanel = createChessboardPanel(); //assuming this method will return a 
//JPanel with chess board using GridLayout 
JPanel infoPanel = new JPanel(); //this is the panel that would contain info elements, that //may go below my chess board. 
//Now add everything to master panel. 
masterPanel.add(chessBoardPanel, BorderLayout.CENTER); 
masterPanel.add(infoPanel, BorderLayout.PAGE_END); 
//add masterPanel to your window (if required) 
this.getContentPane().add(masterPanel);