Я пытаюсь использовать GroupLayout, чтобы сделать что-то вроде следующего:
-------------------------------
- label1: aLongTextfield1 -
- label2: checkbox1 -
- checkbox2 -
- accept cancel -
-------------------------------
label1 и label2 имеют выравнивание в конце. aLongTextfield1, checkbox1 и checkbox2 имеют начальное выравнивание, а кнопки принятия и отмены должны располагаться в конце, чтобы кнопка отмены располагалась вдоль правого края.
Вот код:
GroupLayout layout = new GroupLayout(this);
layout.setAutoCreateGaps(true);
layout.setAutoCreateContainerGaps(true);
setLayout(layout);
layout.setHorizontalGroup(
layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING)
.addComponent(nameLabel)
.addComponent(evaluatorLabel)
.addComponent(boundingBoxLabel))
.addGroup(layout.createParallelGroup()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(nameField)
.addComponent(landCheckBox)
.addComponent(shallowCheckBox)
.addComponent(waterCheckBox)
.addComponent(deepCheckBox)
.addComponent(boundingBoxArea))
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING)
.addGroup(layout.createSequentialGroup()
.addComponent(createButton)
.addComponent(cancelButton)))));
layout.setVerticalGroup(
layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(nameLabel)
.addComponent(nameField))
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(evaluatorLabel)
.addComponent(landCheckBox))
.addComponent(shallowCheckBox)
.addComponent(waterCheckBox)
.addComponent(deepCheckBox)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(boundingBoxLabel)
.addComponent(boundingBoxArea,
GroupLayout.PREFERRED_SIZE,
GroupLayout.DEFAULT_SIZE,
GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(createButton)
.addComponent(cancelButton)));
// Make the bottom buttons the same size
layout.linkSize(SwingConstants.HORIZONTAL, createButton, cancelButton);
Когда я запускаю это, кнопки принятия и отмены выравниваются по левому краю флажков, но я хочу, чтобы они были выровнены по правому краю фрейма. Я могу решить эту проблему, разместив кнопки на отдельной панели, а затем используя BorderLayout, чтобы добавить их на PAGE_END, но я думаю, что должен быть способ сделать все это в GroupLayout.
Решено
Вторая группа в горизонтальной группе должна иметь ТРЕВОЖНОЕ выравнивание. Группа кнопок в горизонтальной группе должна быть последовательной.
layout.setHorizontalGroup(
layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING)
.addComponent(label1)
.addComponent(label2))
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(aLongTextField)
.addComponent(checkBox1)
.addComponent(checkBox2))
.addGroup(layout.createSequentialGroup()
.addComponent(acceptButton)
.addComponent(cancelButton))));
Чтобы быстрее помочь, отправьте минимальный воспроизводимый пример или Краткий, автономный, правильный пример.




Использовать
GroupLayout- плохая идея. Этот макет лучше подходит для автоматической генерации кода (UI-Builder). Таким образом, вы можете попробовать использовать его, но было бы лучше, когда вы переключитесь на другой макет или комбинацию макетов. Например,GridBagLayoutили некоторые сторонние менеджеры по компоновке, такие как MigLayout или FormLayout