1

panelレイアウトがBoxLayoutに設定されているJPanel( )があります。また、JPanelを拡張するカスタムクラスがあり(単純なFlowLayoutでその中にいくつかのコンポーネントがあります)、のインスタンスを単純な左揃えのトップダウン方式でMapRow追加したいと思います。次の方法を検討してください。MapRowpanel

public void drawMappingsPanel(JPanel panel) {
        panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));

        int s = /* aMethodCall() */;
        for (int i = 0; i < s; i++) {
            MapRow row = new MapRow();
            row.setAlignmentX(LEFT_ALIGNMENT);
            panel.add(row);
        }
    }

ただし、コードを実行するMapRowと、以下のようにすべてのパネルが中央に配置されます。

ここに画像の説明を入力してください

MapRowパネルを左に揃えるにはどうすればよいですか?メソッドが機能してsetAlignmentX(LEFT_ALIGNMENT)いないようです...

編集:MapRowインスタンスをダミーに置き換えJButtonたところ、すべて正常に左揃えになりました。したがって、JButtonsなどのコンポーネントは、を使用して左揃えにすることができますsetAlignmentX()が、JPanelsはできませんか?

4

1 に答える 1

1

MapRowのFlowLayoutにはLEFT-alignementを使用する必要があります。これは、次のことを示す小さなSSCCEです。

import java.awt.Color;
import java.awt.FlowLayout;

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

public class TestJPanels {

    protected void initUI() {
        final JFrame frame = new JFrame(TestJPanels.class.getSimpleName());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
        for (int i = 0; i < 5; i++) {
            JLabel label = new JLabel("Label-" + i);
            label.setBorder(BorderFactory.createLineBorder(Color.GREEN));
            JPanel insidePanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
            insidePanel.add(label);
            insidePanel.setBorder(BorderFactory.createLineBorder(Color.RED));
            panel.add(insidePanel);
        }
        frame.add(panel);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new TestJPanels().initUI();
            }
        });
    }
}
于 2012-07-31T08:31:02.563 に答える