setAlignmentX (CENTER_ALIGNMENT) не центрирует boxLayout в JFrame

Я хочу, чтобы два моих текста JLabel имели выравнивание по левому краю и в то же время помещали мой boxLayout в центр JFrame.

Я попробовал установить setAlignmentX(CENTER_ALIGNMENT) на моей панели boxlayout, но он не помещает мой boxlayout в центр.

import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class GuiTest extends JFrame {

    private static final long serialVersionUID = 1L;
    private JLabel jLabelOne = new JLabel();    
    private JLabel jLabelTwo = new JLabel();
    private JPanel panel = new JPanel();
    private BoxLayout boxLayout = new BoxLayout(panel,BoxLayout.Y_AXIS);
    public GuiTest() {

        jLabelOne.setAlignmentX(LEFT_ALIGNMENT);
        jLabelTwo.setAlignmentX(LEFT_ALIGNMENT);

        jLabelOne.setText("This is text one");
        jLabelTwo.setText("This is text two");
        panel.setLayout(boxLayout);
        panel.add(jLabelOne);
        panel.add(jLabelTwo);

        panel.setAlignmentX(CENTER_ALIGNMENT);
        add(panel);
        pack();
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        setSize(1024,768);
        setLocationRelativeTo(null);   
        setVisible(true);
    }

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

person user2211678    schedule 09.08.2014    source источник


Ответы (2)


Это ничего не даст, я верю:

panel.setAlignmentX(CENTER_ALIGNMENT);

потому что вы добавляете панель в ContentPane JFrame, контейнер, который использует BorderLayout, и фактически добавляете его способом по умолчанию, то есть BorderLayout.CENTER.

Подумайте о том, чтобы дать contentPane GridBagLayout и добавить панель JPanel способом по умолчанию, который должен центрировать ее. Это будет видно только в том случае, если его предпочтительный размер меньше, чем ContentPane этого JFrame.

person Hovercraft Full Of Eels    schedule 09.08.2014

import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class GuiTest extends JFrame {

    private static final long serialVersionUID = 1L;
    private JLabel jLabelOne = new JLabel();    
    private JLabel jLabelTwo = new JLabel();
    private JPanel panel = new JPanel();
    private BoxLayout boxLayout = new BoxLayout(panel,BoxLayout.Y_AXIS);

    public GuiTest() {

        panel.setLayout(boxLayout);

        jLabelOne.setAlignmentX(CENTER_ALIGNMENT);
        jLabelTwo.setAlignmentX(CENTER_ALIGNMENT);

        jLabelOne.setText("This is text one");
        jLabelTwo.setText("This is text two");

        panel.add(jLabelOne);
        panel.add(jLabelTwo);

        panel.setAlignmentX(CENTER_ALIGNMENT);
        add(panel);
        setSize(1024,768);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);      
        setLocationRelativeTo(null);   
        setVisible(true);
    }

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

Это должно дать вам то, что вы хотите. У тебя что-то не в порядке.

person Joe    schedule 09.08.2014