20

1つのJPanel内で両方のJLabelを垂直に整列(中央)しようとしています。

JPanel panel = new JPanel();
panel.setPreferredSize(size);
JLabel label1 = new JLabel(icon);
JLabel label2 = new JLabel("text");
panel.add(label1);
panel.add(label2);

setAligmentY()を使用しようとしましたが、成功しませんでした。両方のラベルは常にJPanelの上部に表示されます。

UPD:ラベルは、FlowLayoutを使用する場合と同じように隣り合わせに配置する必要がありますが、JPanelの中​​央に配置する必要があります。

4

3 に答える 3

26

GridBagLayoutデフォルトの制約でを使用します。これが小さなデモコードです:

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

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

public class TestVerticalAlignement {

    protected void initUI() {
        final JFrame frame = new JFrame();
        frame.setTitle("Test vertical alignement");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        panel.setLayout(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        JLabel label1 = new JLabel("label1");
        JLabel label2 = new JLabel("label2");
        panel.add(label1, gbc);
        panel.add(label2, gbc);
        frame.add(panel);
        frame.setSize(300, 300);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new TestVerticalAlignement().initUI();
            }
        });
    }

}
于 2012-07-06T07:33:25.397 に答える
17

あなたはこの答えを見ることができます: https://stackoverflow.com/a/18073909/189411

JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
于 2014-07-18T09:47:59.710 に答える