Я пытаюсь создать макет с Swing с помощью GridBagLayout.
Я хочу добавить ComboBox, помимо кнопки, где Button имеет постоянный размер, а ComboBox заполняет все доступное пространство в строке:
Однако, если я увеличиваю окно, появляется пустое пространство между ComboBox и Button:
Как я могу разместить эту форму, чтобы ComboBox заполнял все пространство даже при изменении размера окна?
Формат макета для компонентов в Scala:
layout(button) = new Constraints() {
gridx = 1
gridy = 0
anchor = GridBagPanel.Anchor.LineEnd
}
layout(comboBox) = new Constraints() {
gridx = 0
gridy = 0
fill = GridBagPanel.Fill.Horizontal
}
layout(centerPanel) = new Constraints() {
gridx = 0
gridy = 1
weighty = 1
weightx = 1
gridwidth = 2
fill = GridBagPanel.Fill.Both
}
Используйте BorderLayout
для этого раздела графического интерфейса. Поместите комбо. в CENTER
и кнопке LINE_END
.
Как это:
import java.awt.BorderLayout;
import javax.swing.*;
import javax.swing.border.*;
public class StretchComboLayout {
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
JPanel ui = new JPanel(new BorderLayout(2, 2));
ui.setBorder(new EmptyBorder(4, 4, 4, 4));
JPanel controls = new JPanel(new BorderLayout(2, 2));
ui.add(controls, BorderLayout.PAGE_START);
String s = new String(Character.toChars(8594));
String[] items = {"Choice: right " + s + " arrow"};
JComboBox cb = new JComboBox(items);
controls.add(cb, BorderLayout.CENTER);
controls.add(new JButton("Button"), BorderLayout.LINE_END);
JSplitPane sp = new JSplitPane(
JSplitPane.VERTICAL_SPLIT,
new JTextArea(4,40),
new JTextArea(4,40));
ui.add(sp, BorderLayout.CENTER);
JFrame f = new JFrame("Stretch Combo Layout");
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setContentPane(ui);
f.pack();
f.setLocationByPlatform(true);
f.setVisible(true);
}
};
SwingUtilities.invokeLater(r);
}
}
BorderLayout
для этого раздела графического интерфейса. Положите комбо. вCENTER
и кнопки вLINE_END
.