Как центрировать JLabel на панели с помощью BoxLayout

Я новичок в программировании на Java, и у меня возник вопрос о BoxLayout. Я не могу получить JLabels по центру на панели с BoxLayout

Я хочу изменить то, что получил сейчас:

https://stackru.com/images/45bed4ac096e66d0ddc51f454c6d5715602fc12e.png

к этому:

https://stackru.com/images/cafb81f53661191e9c27c10ec7138df6dd6f114a.png

получить ярлыки, находящиеся полностью посередине панели.

Вот мой код:

import java.awt.Dimension;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Test extends JFrame{

    private JLabel label1;
    private JLabel label2;
    private JLabel label3;
    private JLabel label4;
    private JLabel label5;

    public Test(){
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        initWidgets();
        setVisible(true);
    }

    private void initWidgets(){
        setPreferredSize(new Dimension(300, 300));

        label1 = new JLabel("Label 1");
        label2 = new JLabel("Label 2");
        label3 = new JLabel("Label 3");
        label4 = new JLabel("Label 4");
        label5 = new JLabel("Label 5");

        JPanel jpanel = new JPanel();

        label1.setAlignmentX(CENTER_ALIGNMENT);
        label2.setAlignmentX(CENTER_ALIGNMENT);
        label3.setAlignmentX(CENTER_ALIGNMENT);
        label4.setAlignmentX(CENTER_ALIGNMENT);
        label5.setAlignmentX(CENTER_ALIGNMENT);

        jpanel.setLayout(new BoxLayout(jpanel, BoxLayout.PAGE_AXIS));

        jpanel.add(label1);
        jpanel.add(Box.createRigidArea(new Dimension(0, 10)));
        jpanel.add(label2);
        jpanel.add(Box.createRigidArea(new Dimension(0, 10)));
        jpanel.add(label3);
        jpanel.add(Box.createRigidArea(new Dimension(0, 10)));
        jpanel.add(label4);
        jpanel.add(Box.createRigidArea(new Dimension(0, 10)));
        jpanel.add(label5);

        add(jpanel);
        pack();
    }

    public static void main(String[] args) {
        new Test();
    }
}

2 ответа

Решение

Для вертикального центрирования компонентов необходимо добавить "клей" в начале и конце:

jpanel.add(Box.createVerticalGlue());
jpanel.add(label1);
jpanel.add(Box.createRigidArea(new Dimension(0, 10)));
jpanel.add(label2);
jpanel.add(Box.createRigidArea(new Dimension(0, 10)));
jpanel.add(label3);
jpanel.add(Box.createRigidArea(new Dimension(0, 10)));
jpanel.add(label4);
jpanel.add(Box.createRigidArea(new Dimension(0, 10)));
jpanel.add(label5);
jpanel.add(Box.createVerticalGlue());

Прочитайте раздел из руководства Swing о том, как использовать BoxLayout для получения дополнительной информации.

Попробуйте добавить это после setAlignmentX

label1.setHorizontalAlignment(SwingConstants.CENTER);
label2.setHorizontalAlignment(SwingConstants.CENTER);
label3.setHorizontalAlignment(SwingConstants.CENTER);
label4.setHorizontalAlignment(SwingConstants.CENTER);
label5.setHorizontalAlignment(SwingConstants.CENTER);

затем добавьте метки на панель следующим образом:

jpanel.add(label1, BorderLayout.CENTER);
jpanel.add(label2, BorderLayout.CENTER);
jpanel.add(label3, BorderLayout.CENTER);
jpanel.add(label4, BorderLayout.CENTER);
jpanel.add(label5, BorderLayout.CENTER);
Другие вопросы по тегам