Смешанное выравнивание с Growplayout Java Swing
-
28-09-2019 - |
Вопрос
Я пытаюсь построить окно GUI в моем заявлении. То, что я пытаюсь сделать, это иметь окно с несколькими кнопками сверху и большую текстовую область. Что-то вроде этого:
+--------------------------------------------------+
| [button1] [button2] [button3] |
| +----------------------------------------------+ |
| | text area | |
| | | |
| | | |
| | | |
| +----------------------------------------------+ |
+--------------------------------------------------+
Я почти там, используя Growplayout:
layout.setHorizontalGroup(
layout.createParallelGroup()
.addGroup(layout.createSequentialGroup()
.addComponent(button1)
.addComponent(button2))
.addComponent(closeWindow))
.addComponent(textarea1)
);
layout.setVerticalGroup(
layout.createSequentialGroup()
.addGroup(layout.createParallelGroup()
.addComponent(button1)
.addComponent(button2)
.addComponent(button3))
.addComponent(textarea)
);
Проблема в том, что это заканчивается кнопкой3, выровненной влево, с двумя другими. Я не могу понять, как я могу указать выравнивание только на одной кнопке. Я могу сделать GroouPlayout.Alignment.Tailing на всей панели кнопки, но это ударяет все 3 кнопки, что также не совсем правильно.
Так какой правильный подход? Поскольку выравнивание относится только к параллельным группам, я не думаю, что оказывает горизонтальную группу с двумя последовательными группами в нем поможет?
Что мне не хватает?
Решение
Добавьте зазор в вашей последовательной группе. Оставляя свою горизонтальную группу как:
layout.setVerticalGroup(
layout.createSequentialGroup()
.addGroup(layout.createParallelGroup()
.addComponent(button1)
.addComponent(button2)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(button3))
.addComponent(textarea)
);
Разрыв с темиператорами действует как «весна», принимая все доступное пространство.
Другие советы
Попробуйте добавить:
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 1, Short.MAX_VALUE)
после второй кнопки. Max_Value приведет к тому, что разрыв будет расширяться как необходимо.
Вы хотите использовать AddPreferredGap (), который доступен только в последовательных группах. Код ниже дает вам нужный макет.
layout.setHorizontalGroup(
layout.createParallelGroup()
.addGroup( layout.createSequentialGroup()
.addComponent( button1 )
.addComponent( button2 )
.addPreferredGap( LayoutStyle.ComponentPlacement.RELATED, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE )
.addComponent( button3 ) )
.addComponent( textArea )
);
layout.setVerticalGroup(
layout.createSequentialGroup()
.addGroup( layout.createParallelGroup()
.addComponent( button1 )
.addComponent( button2 )
.addComponent( button3 ) )
.addComponent( textArea )
);