Создание BoxLayout переместить компоненты в вершину при укладке слева направо

У меня есть a JPanel который использует a BoxLayout в X_AXIS направление. Проблему, которую я имею, лучше всего показывает изображение: alt text

Поскольку Вы видите JPanel слева, центрировался, а не выравнивался наверху. Я хотел бы, чтобы они оба были выровненные наверху и сложенные слева направо, как я могу достигнуть этого с этим менеджером по расположению? Код, который я написал, следующие:

public GameSelectionPanel(){

    setLayout(new BoxLayout(this, BoxLayout.X_AXIS));

    setAlignmentY(TOP_ALIGNMENT);

    setBorder(BorderFactory.createLineBorder(Color.black));

    JPanel botSelectionPanel = new JPanel();

    botSelectionPanel.setLayout(new BoxLayout(botSelectionPanel, BoxLayout.Y_AXIS));

    botSelectionPanel.setBorder(BorderFactory.createLineBorder(Color.red));

    JLabel command = new JLabel("Please select your opponent:"); 

    ButtonGroup group = new ButtonGroup();

    JRadioButton button1 = new JRadioButton("hello world");
    JRadioButton button2 = new JRadioButton("hello world");
    JRadioButton button3 = new JRadioButton("hello world");
    JRadioButton button4 = new JRadioButton("hello world");

    group.add(button1);
    group.add(button2);
    group.add(button3);
    group.add(button4);

    botSelectionPanel.add(command);
    botSelectionPanel.add(button1);
    botSelectionPanel.add(button2);
    botSelectionPanel.add(button3);
    botSelectionPanel.add(button4);

    JPanel blindSelectionPanel = new JPanel();
    blindSelectionPanel.setBorder(BorderFactory.createLineBorder(Color.yellow));

    blindSelectionPanel.setLayout(new BoxLayout(blindSelectionPanel, BoxLayout.Y_AXIS));

    JRadioButton button5 = new JRadioButton("hello world");
    JRadioButton button6 = new JRadioButton("hello world");

    ButtonGroup group2 = new ButtonGroup();
    group2.add(button5);
    group2.add(button6);

    JLabel blindStructureQuestion = new JLabel("Please select the blind structure:");

    blindSelectionPanel.add(blindStructureQuestion);
    blindSelectionPanel.add(button5);
    blindSelectionPanel.add(button6);

    add(botSelectionPanel);
    add(blindSelectionPanel);

    setVisible(true);
}

6
задан Glorfindel 29 June 2019 в 04:04
поделиться

2 ответа

Что ж, метод setAlignmentY здесь не действует, поскольку он действует на панель, рассматриваемую как компонент.

Как вы уже догадались, компоновка содержащихся панелей определяется менеджером компоновки, который вы используете. К сожалению, BoxLayout не предоставляет ту функцию, на которую вы смотрите.

в стандартном JDK, очевидно, предпочтительным вариантом для вашей задачи является GridBagLayout . Хотя поначалу это довольно сложно понять, он быстро откроет вам свои возможности в компоновке компонентов.

используя полезный класс GBC , ваши компоненты могут быть расположены следующим образом:

setLayout(new GridBagLayout(this));

add(botSelectionPanel, new GBC(0,1).setAnchor(TOP));
add(blindSelectionPanel, new GBC(0,2).setAnchor(TOP));

или я так думаю; -)

2
ответ дан 17 December 2019 в 02:27
поделиться

Ридел прав относительно установки setAlignmentY в самой GameSelectionPanel и GridBagLayout - отличная альтернатива. Если вы предпочитаете использовать BoxLayout , статья Устранение проблем с выравниванием обсуждает этот вопрос, предлагая «все компоненты, управляемые расположением BoxLayout слева направо, обычно должны иметь одинаковое выравнивание по оси Y». . " В вашем примере добавьте

botSelectionPanel.setAlignmentY(JPanel.TOP_ALIGNMENT);
blindSelectionPanel.setAlignmentY(JPanel.TOP_ALIGNMENT);
4
ответ дан 17 December 2019 в 02:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: