Я пишу небольшую программу на Java AWT.
У меня есть панель с GridLayout (2 столбца). С левой стороны панели находится Метка, с правой стороны - CheckboxGroup.
CheckboxGroup находится в FlowLayout. Он не отображается на той же высоте, что и метка. Как я могу отрегулировать высоту / вертикально центрировать мою CheckboxGroup?
Я пытался обернуть CheckboxGroup (с FlowLayout) в BorderLayout и установить для него BorderLayout.CENTER/SOUTH.
Panel panelSelector = new Panel(new GridLayout(0,2,3,3));
HotTubLabel = new Label("Hot Tub option:");
panelSelector.add(HotTubLabel);
HotTubInput = new CheckboxGroup();
Panel panelHotTubCheck = new Panel(new FlowLayout());
panelHotTubCheck.add(new Checkbox("Yes", HotTubInput, false));
panelHotTubCheck.add(new Checkbox("No", HotTubInput, false));
panelHotTubCheck.add(new Checkbox("No preference", HotTubInput, true));
panelSelector.add(panelHotTubCheck);
Я ожидаю, что строка CheckboxGroup будет на той же высоте, что и линия Label, так же, как и для всех других объектов, таких как выбор, TextField или Label.
Вот картинка: Ссылка на картинку, потому что мне не хватает репутации ^^
РЕДАКТИРОВАТЬ: Исправлено выравнивание с помощью GridLayout для CheckboxGroup, но теперь GridLayout растягивает CheckboxGroup по всей длине программы и сокращает «Без предпочтений» до «Без пр ..» в размере программы по умолчанию.
Смотри эту картинку: Ссылка
Я бы хотел, чтобы они отображались как с FlowLayout ранее, но выровнены по вертикали.
РЕДАКТИРОВАТЬ 2: Вот минимальный воспроизводимый пример начальной проблемы:
import java.awt.*;
import java.awt.event.*;
public class ChaletSelectorExample1 extends Frame {
private Label HotTubLabel;
private CheckboxGroup HotTubInput;
public ChaletSelectorExample1(){
Panel panelSelector = new Panel(new GridLayout(0,2,3,3));
HotTubLabel = new Label("Hot Tub option:");
panelSelector.add(HotTubLabel);
HotTubInput = new CheckboxGroup();
Panel panelHotTubCheck = new Panel(new FlowLayout());
panelHotTubCheck.add(new Checkbox("Yes", HotTubInput, false));
panelHotTubCheck.add(new Checkbox("No", HotTubInput, false));
panelHotTubCheck.add(new Checkbox("No preference", HotTubInput, true));
panelSelector.add(panelHotTubCheck);
setLayout(new BorderLayout(3, 3));
add(panelSelector, BorderLayout.CENTER);
addWindowListener(new WindowAdapter() {
@Override public void windowClosing(WindowEvent evt) {
System.exit(0);
}
});
setTitle("ChaletSelectorExample1");
setSize(500, 500);
setVisible(true);
}
public static void main(String[] args) {
new ChaletSelectorExample1();
}
}
А вот минимальный воспроизводимый пример проблемы с обрезанным текстом после исправления исходной проблемы:
import java.awt.*;
import java.awt.event.*;
public class ChaletSelectorExample2 extends Frame {
private Label HotTubLabel;
private CheckboxGroup HotTubInput;
public ChaletSelectorExample2(){
Panel panelSelector = new Panel(new GridLayout(0,2,3,3));
HotTubLabel = new Label("Hot Tub option:");
panelSelector.add(HotTubLabel);
HotTubInput = new CheckboxGroup();
Panel panelHotTubCheck = new Panel(new GridLayout(0,3,0,0));
panelHotTubCheck.add(new Checkbox("Yes", HotTubInput, false));
panelHotTubCheck.add(new Checkbox("No", HotTubInput, false));
panelHotTubCheck.add(new Checkbox("No preference", HotTubInput, true));
panelSelector.add(panelHotTubCheck);
setLayout(new BorderLayout(3, 3));
add(panelSelector, BorderLayout.CENTER);
addWindowListener(new WindowAdapter() {
@Override public void windowClosing(WindowEvent evt) {
System.exit(0);
}
});
setTitle("ChaletSelectorExample2");
setSize(500, 500);
setVisible(true);
}
public static void main(String[] args) {
new ChaletSelectorExample2();
}
}
Вот как я бы хотел, чтобы он выглядел (а затем, конечно, все остальные опции, которые я хочу включить сверху или снизу): Ссылка