我有一个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个组件(WESTCENTEREAST),但它们分布不均匀。同样,FlowLayout在允许组件居中对齐的同时,也不会平均分配它们。

最简单的方法是使用GridLayout

setLayout(new GridLayout());
label1.setHorizontalAlignment(JLabel.CENTER);

10-07 23:25