Swing/BoxLayoutAlignment のバックアップ(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/BoxLayoutAlignment へ行く。
- category: swing folder: BoxLayoutAlignment title: BoxLayoutでJLabelの中央揃えをテストする tags: [BoxLayout, JLabel] author: aterai pubdate: 2015-01-26T00:15:23+09:00 description: BoxLayoutを設定したJPanelに、最小サイズを設定したJLabelを中央揃えで配置するテストを行います。 image:
概要
BoxLayout
を設定したJPanel
に、最小サイズを設定したJLabel
を中央揃えで配置するテストを行います。
Screenshot
Advertisement
サンプルコード
JLabel l2 = new JLabel("abc") {
@Override public Dimension getPreferredSize() {
return new Dimension(50, 50);
}
@Override public Dimension getMinimumSize() {
Dimension d = super.getMinimumSize();
if (Objects.nonNull(d)) {
int i = ((Integer) spinner.getValue()).intValue();
d.setSize(i, i);
}
return d;
}
};
l2.setOpaque(true);
l2.setBackground(Color.ORANGE);
l2.setFont(l.getFont().deriveFont(Font.PLAIN));
l2.setAlignmentX(Component.CENTER_ALIGNMENT);
l2.setAlignmentY(Component.CENTER_ALIGNMENT);
l2.setVerticalAlignment(SwingConstants.CENTER);
l2.setVerticalTextPosition(SwingConstants.CENTER);
l2.setHorizontalAlignment(SwingConstants.CENTER);
l2.setHorizontalTextPosition(SwingConstants.CENTER);
final JPanel p2 = new TestPanel();
p2.setLayout(new BoxLayout(p2, BoxLayout.Y_AXIS));
p2.add(Box.createVerticalGlue());
p2.add(l2);
p2.add(Box.createVerticalGlue());
View in GitHub: Java, Kotlin解説
上記のサンプルは、swing - Alignment of Single Characters in Java BoxLayout on Y-Axis Is Off-Center - Stack Overflowを参考にして、BoxLayout
の中央揃えのバグ?を検証するために作成しています。
setAlignmentX(Component.CENTER_ALIGNMENT)
、setAlignmentY(Component.CENTER_ALIGNMENT)
を設定したJLabel
を作成BoxLayout.X_AXIS
のBox
に、このJLabel
が左右中央に配置されるよう、Box.createHorizontalGlue()
で挟んで追加BoxLayout.Y_AXIS
のBox
に、このJLabel
が上下中央に配置されるよう、Box.createVerticalGlue()
で挟んで追加JLabel#getMinimumSize()
の返す値をJSpinner
で変更すると、値が奇数になる場合で揃えがずれてしまう
参考リンク
- How to Use BoxLayout (The Java™ Tutorials > Creating a GUI With JFC/Swing > Laying Out Components Within a Container)
- swing - Alignment of Single Characters in Java BoxLayout on Y-Axis Is Off-Center - Stack Overflow