/ / Кілька менеджерів макетів на Java - Java, користувальницький інтерфейс, swing, макет

Кілька менеджерів макета в Java - java, користувальницький інтерфейс, гойдалка, макет

Чи можна використати більше 1 менеджера макетів уJava. Зараз я використовую gridLayout для реалізації шахової дошки, але під нею я хотів би помістити деякі інші речі, але не в gridLayout. Можливо, FlowLayout чи інший макет. Як я можу це зробити? Дякую!

Відповіді:

7 для відповіді № 1

Чи можна використовувати більше 1 макета менеджер на Java.

Абсолютно. Насправді, використання декількох менеджерів версток - це норма.

Як я буду робити це?

Будь-який Container підклас може мати a LayoutManager і містять дочірні елементи. І кожен з цих дочірніх елементів може сам бути a Container з дітьми. Найчастіше використовуваний контейнер під рамками верхнього рівня - JPanel.

Для вашого прикладу ви, мабуть, повинні використовувати a BorderLayout для рами поставте a JPanel з сіткою в її центральному положенні (оскільки це та, яка отримує весь вільний вільний простір, коли іншим позиціям надаються бажані розміри), а інша JPanel з "іншими речами" в ПІВДЕННІЙ позиції.

Більш детальну інформацію можна знайти в Свінг-підручник з менеджерів верст.


7 для відповіді № 2

Так, все, що вам потрібно, це спланувати розміщення всього інтерфейсу користувача (тобто; Вікно, головна панель тощо)

Наприклад, вам потрібно покласти щось під свою шахівницю, я зазвичай ходив би з 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);