Para centralizar elementos em um BoxLayout (seja no eixo X para um layout vertical, ou no eixo Y para um layout horizontal) usando o centro do elemento, você pode configurar o alinhamento dos componentes usando o método setAlignmentX (para centralização horizontal em um layout vertical) ou setAlignmentY (para centralização vertical em um layout horizontal). O valor Component.CENTER_ALIGNMENT (0.5f) garante que o componente fique alinhado ao seu centro.
Aqui está um exemplo de código para centralizar elementos em um BoxLayout vertical:
import javax.swing.*;
import java.awt.*;
public class CenteredBoxLayoutExample {
public static void main(String[] args) {
JFrame frame = new JFrame("Centered BoxLayout Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 200);
// Cria um painel com BoxLayout vertical
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
// Adiciona alguns botões como exemplo
JButton button1 = new JButton("Botão 1");
JButton button2 = new JButton("Botão 2");
JButton button3 = new JButton("Botão 3");
// Define o alinhamento horizontal no centro para cada botão
button1.setAlignmentX(Component.CENTER_ALIGNMENT);
button2.setAlignmentX(Component.CENTER_ALIGNMENT);
button3.setAlignmentX(Component.CENTER_ALIGNMENT);
// Opcional: Define a largura máxima para evitar que os botões se expandam
button1.setMaximumSize(new Dimension(100, 30));
button2.setMaximumSize(new Dimension(100, 30));
button3.setMaximumSize(new Dimension(100, 30));
// Adiciona os botões ao painel
panel.add(Box.createVerticalGlue()); // Espaço flexível no topo
panel.add(button1);
panel.add(Box.createVerticalStrut(10)); // Espaço fixo entre botões
panel.add(button2);
panel.add(Box.createVerticalStrut(10));
panel.add(button3);
panel.add(Box.createVerticalGlue()); // Espaço flexível no fundo
frame.add(panel);
frame.setVisible(true);
}
}
Explicação:
Alinhamento : O método setAlignmentX(Component.CENTER_ALIGNMENT) centraliza os componentes horizontalmente em um BoxLayout vertical. Para um BoxLayout horizontal, use setAlignmentY(Component.CENTER_ALIGNMENT) para centralizar verticalmente.
Controle de tamanho : Definir setMaximumSize evita que os componentes se expandam para preencher todo o espaço disponível, mantendo o alinhamento central visível.
Espaçamento : Box.createVerticalGlue() adiciona espaço flexível para distribuir os componentes de maneira uniforme, enquanto Box.createVerticalStrut(n) adiciona um espaço fixo entre os componentes.
Flexibilidade : O uso de Glue e Strut ajuda a manter os componentes centralizados mesmo quando a janela é redimensionada.