java swing выравнивание радиокнопок

#java #swing #radio-button #alignment #jpanel

#java #swing #переключатель #выравнивание #jpanel

Вопрос:

Я хочу центрировать свои радиокнопки на панели, но когда я центрирую, они центрируются в соответствии с длиной текста кнопки, так что да, они центрированы, но не выровнены друг с другом и выглядят очень некрасиво. Как я могу исправить свой код?

 radioButtonMenuPanel = new JPanel();
    radioButtonMenuPanel.setLayout(new BoxLayout(radioButtonMenuPanel,
            BoxLayout.PAGE_AXIS));

    ButtonGroup group = new ButtonGroup();
    for (String item : answerItems) {
        JRadioButton radioButton = new JRadioButton(item);
        radioButton.setAlignmentX(Component.Center_ALIGNMENT);
        radioButtonMenuPanel.add(radioButton);
        group.add(radioButton);
    }
  

Ответ №1:

Вы всегда можете использовать GridBagLayout. Используя этот макет, вы можете привязать компонент к сетке с любой стороны ячейки.

 radioButtonMenuPanel.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = GridBagConstraints.RELATIVE;
gbc.anchor = GridBagConstraints.WEST;

ButtonGroup group = new ButtonGroup();
for (String item : answerItems) {
    JRadioButton radioButton = new JRadioButton(item);
    group.add(radioButton);
    radioButtonMenuPanel.add(radioButton, gbc);
}
  

Что-то подобное должно сработать. По умолчанию a GridBagLayout центрирует компонент на экране в виде небольшой сетки. В этом случае мы просто закрепляем компонент в ячейке к западу, где компонент будет помещен в первый столбец (gridx = 0), и для каждой переключающей кнопки он будет располагаться рядом с последним компонентом.

Надеюсь, это помогло!

Ответ №2:

Как насчет выравнивания кнопок по левому краю на отдельной панели, а затем центрирования этой панели на другой панели.