Java - как центрировать вертикальный столбец компонентов? - PullRequest
5 голосов
/ 10 июля 2011

Это очень просто, что я хочу сделать, но я не могу придумать, как это сделать. В JFrame или JPanel, как вы центрируете компоненты по вертикали? То есть аналогично использованию центрального тега в HTML. Компоненты находятся в столбце, и все они центрированы.

Я пробовал BoxLayout с Y_AXIS и PAGE_AXIS, но он странным образом выравнивает компоненты для меня. Я попытался использовать FlowLayout с заданным размером, чтобы он оборачивался, но не центрировал его. Я бы предпочел не прибегать к чему-то мощному, как GridBagLayout, для такой простой вещи, если только это не единственный вариант. Помогите!

1 Ответ

8 голосов
/ 10 июля 2011

Если бы мне пришлось сделать предположение, я бы сказал, что вы используете компоненты с другим «выравниванием по оси X». Попробуйте использовать:

component.setAlignmentX(JComponent.CENTER_ALIGNMENT);

Для получения дополнительной информации см. Раздел из учебника по Swing на Устранение проблем выравнивания .

Если вам нужна дополнительная помощь, тогда опубликуйте SSCCE , показывая, что вы пытались.

Edit:

import java.awt.*;
import javax.swing.*;

public class BoxLayoutTest extends JFrame
{
    public BoxLayoutTest()
    {
        Box box = new Box(BoxLayout.Y_AXIS);
        add( box );

        JLabel label = new JLabel("I'm centered");
        label.setAlignmentX(JComponent.CENTER_ALIGNMENT);

        box.add( Box.createVerticalGlue() );
        box.add( label );
        box.add( Box.createVerticalGlue() );
    }

    public static void main(String[] args)
    {
        BoxLayoutTest frame = new BoxLayoutTest();
        frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
        frame.setSize(300, 300);
        frame.setLocationRelativeTo( null );
        frame.setVisible(true);
    }
}
...