我有一个JPanel,它显示多个JLable,每个JLable代表一个二进制字符串的字符。 (它们都是独立的,因为每个必须具有一个MouseListener,但这不是我的问题的一部分)
我的问题是我似乎无法将JLable居中。
我努力了
this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
add(label1); //= left aligned
label1.setAlignmentX(Component.CENTER_ALIGNMENT); //= still left aligned
和
this.setLayout(new BorderLayout());
add(label1, BorderLayout.CENTER); //= only 1 showed up
我也将其保留为默认的FlowLayout,但是由于某种原因,它忽略了jLabel的大小并将其间隔开,因此它们并不完全适合它们所假定的行。我还尝试过将FlowLayout放在Boxlayout中。还是没用。
请注意,在上面的示例中,我有多个标签(我实际上有31个!)
我该如何工作?
编辑:更新了我复制错误代码的位置。 label1.setAlignmentX(Component.CENTER_ALIGNMENT)
编辑:jLabel需要在水平行中,而不是列中。
最佳答案
BoxLayout
的布局必须沿Y_AXIS
进行,才能使任何中心对齐生效。对于BorderLayout
,虽然可以水平放置3个组件(WEST
,CENTER
,EAST
),但它们分布不均匀。同样,FlowLayout
在允许组件居中对齐的同时,也不会平均分配它们。
最简单的方法是使用GridLayout
:
setLayout(new GridLayout());
label1.setHorizontalAlignment(JLabel.CENTER);