2

これは、次のプロパティを持つ一連の JLabels で表示するつもりだった JFrame です。

  • 縦積み
  • 水平方向に中央揃え
  • 緑の枠
  • 白色の背景
  • 青文字

しかし、私は代わりにこれを取得します:

ここに画像の説明を入力

垂直に積み重ねられた青いテキスト、緑の境界線は問題なく機能しますが、白い背景と水平方向の中央には機能しません。また、ラベルが JPanel の幅全体に広がると思っていたでしょう。

私は何を間違っていますか?


編集:背景色に関するこの質問を見逃しました。残りの質問は、BoxLayout と、他の軸でのコンポーネントの配置についてです。


import java.awt.Color;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

public class BoxLayoutLabelsTest extends JFrame
{
    public BoxLayoutLabelsTest(String title)
    {
        super(title);
        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
        addLabel(panel, "Hydrogen");
        addLabel(panel, "Helium");
        addLabel(panel, "Lithium");
        addLabel(panel, "Beryllium");
        addLabel(panel, "Boron");

        setContentPane(panel);
        pack();
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    static private void addLabel(JPanel panel, String text) {
        JLabel label = new JLabel(text);
        label.setBorder(BorderFactory.createLineBorder(Color.GREEN));
        label.setBackground(Color.WHITE);
        label.setForeground(Color.BLUE);
        label.setHorizontalAlignment(SwingConstants.CENTER);
        panel.add(label);
    }

    public static void main(String[] args) {
        new BoxLayoutLabelsTest("BoxLayoutLabelsTest").setVisible(true);
    }

}
4

1 に答える 1

3

次の行を に追加しますaddLabel()

label.setAlignmentX(CENTER_ALIGNMENT);

完全な例については、BoxLayout の使用方法を参照してください 。

後で追加:

簡単な解決策を見つけました:

label.setMaximumSize(new Dimension(200, 200));
//label.setAlignmentX(CENTER_ALIGNMENT);//aligns label itself
label.setHorizontalAlignment(SwingConstants.CENTER);//aligns text inside the label

これも機能しますが、BorderLayout を使用したソリューションの方が適切なようです。

于 2011-06-09T19:15:21.127 に答える