Java AWT: Как установить вертикальный флажок с макетом потока рядом с меткой внутри панели с разбивкой по сетке? - PullRequest
0 голосов
/ 10 июня 2019

Я пишу небольшую программу на 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();
  }

}

Вот как я бы хотел, чтобы он выглядел (а затем, конечно, все остальные опции, которые я хочу включить сверху или снизу): Ссылка

...