Подтвердить что ты не робот

Как центрировать элементы в BoxLayout, используя центр элемента?

Я использую outputPanel.setLayout(new BoxLayout(outputPanel, BoxLayout.Y_AXIS));, а затем добавляю элементы (например JLabels, JButtons) в outputPanel. Например: outputPanel.add(submitButton);.

Я вижу, что все добавленные элементы "центрированы". Это хорошо, потому что я хочу, чтобы мои элементы были в центре. Когда я пишу "центр", я имею в виду "равное расстояние слева и справа". Но проблема в том, что левая часть элемента помещается в центр. И я хочу, чтобы центр элементов был помещен в центр. Как я могу получить это поведение?

4b9b3361

Ответ 1

Проблема может быть решена с помощью myLabel.setAlignmentX(Component.CENTER_ALIGNMENT);. Он работает с JLabel, JButton и JRadioButton.

Ответ 2

Пока что лучший метод, с которым я столкнулся, работает с каждым типом компонента:
1. Создайте новый JPanel:

JPanel helperPanel = new JPanel();

2. Добавьте компонент (в этом примере submitButton), который вы хотите центрировать по горизонтали в JPanel:
helperPanel.add(submitButton);

3. Добавьте панель к исходной панели (той, которая установлена ​​в BoxLayout): outerPanel.add(helperPanel);

Это! Вы также можете установить максимальный размер на helperPanel, если вы не хотите, чтобы BoxLayout из outerPanel расширял его.
Если вам интересно, почему это работает: неявным менеджером компоновки JPanel является FlowLayout, который автоматически центрирует ваши элементы.