概要
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);
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
で変更すると値が奇数になる場合で揃えがずれてしまう
- JDK-8068374 setAlignmentX, setAlignmentY, getAlignmentX, getAlignmentY javadoc of JComponent - Java Bug System
- via: OpenJDK Swing Development - <Swing Dev> 8u Typos in JComponent#setAlignment methods
- https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/JComponent.html#setAlignmentY-float-
- 「水平の配置方法を設定します。」はドキュメントの間違いで、実際の動作は「垂直の配置方法を設定します。」
setAlignmentX
、getAlignmentX
、getAlignmentY
も同様に逆の説明になっているjava 9
のドキュメントは修正済み
参考リンク
- 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