качели: BoxLayout и поперечное выравнивание? - PullRequest
1 голос
/ 03 февраля 2010

У меня есть тупик, который, кажется, не имеет смысла.

Если я запускаю программу ниже, я получаю два диалоговых окна, каждое из которых содержит JPanels.

alt text alt text

Первый имеет пару JLabels, которые выровнены по левому краю. Второй расширяет первый и добавляет еще одну JPanel в качестве подпанели, но группа меток выровнена по правому краю (хотя внутри группы они выровнены по левому краю) Что дает, и как мне это исправить, чтобы все выровнялось по левому краю? (Или как бы я выровнял их все по правому краю?)

package com.example.test.gui;

import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class BoxLayoutQuestion {
    public static class TestPanel1 extends JPanel
    {
        public TestPanel1()
        {
            super();
            initTestPanel1();
        }
        void initTestPanel1()
        {
            setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
            add(new JLabel("Four score and seven years ago"));
            add(new JLabel("One small step for man"));
            add(new JLabel("To be or not to be, that is the question"));
        }
    }
    public static class TestPanel2 extends TestPanel1
    {
        public TestPanel2()
        {
            super();
            initTestPanel2();
        }
        void initTestPanel2()
        {
            JPanel subpanel = new JPanel();
            subpanel.setBorder(
                    BorderFactory.createTitledBorder("something special"));
            subpanel.add(new JLabel("Where's the beef?"));
            add(subpanel);
        }
    }
    public static void main(String[] args) {
        JOptionPane.showMessageDialog(null, new TestPanel1(), 
                "quotations", JOptionPane.INFORMATION_MESSAGE);
        JOptionPane.showMessageDialog(null, new TestPanel2(), 
                "more quotations", JOptionPane.INFORMATION_MESSAGE);
    }   
}

1 Ответ

1 голос
/ 03 февраля 2010

Я обнаружил, что макет блока очень чувствителен к выравниванию содержащихся в нем компонентов.Вероятно, вам нужно установить компонент alignmentX для компонентов, которые вы добавляете в диалог.

Если вы вызываете setAlignmentX (LEFT_ALIGNMENT) для каждого компонента, прежде чем добавлять их, вы должны получить согласованное поведение по левому краю.

...