【问题标题】:Centering multiple JLabels in a JPanel在 JPanel 中将多个 JLabel 居中
【发布时间】:2023-12-24 05:49:01
【问题描述】:

我有一个 JPanel,它显示多个 JLable,每个 JLable 代表一个二进制字符串的一个字符。 (他们都是独立的,因为每个人都必须有一个 MouseListener,但这不是我的问题的一部分)

我的问题是我似乎无法将 JLables 居中。

我试过了

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,但由于某种原因,这会忽略 jLabels 的大小和间距,因此它们并不都适合它们所假设的行。我还尝试将 FlowLayout 放在 Boxlayout 中。还是不行。

请注意,在我上面的示例中,我有多个标签(我实际上有 31 个!!)

我应该如何让它工作?

编辑:更新了我复制错误代码的地方。 label1.setAlignmentX(Component.CENTER_ALIGNMENT)

编辑:jLabels 需要位于水平行中,而不是列中。

【问题讨论】:

  • 第一个代码中alignment 的值是多少?
  • 如需尽快获得更好的帮助,请发帖SSCCE
  • 我建议使用单列 GridLayout,标签文本居中。
  • @TedHopp 哎呀,复制代码错误。它已更新。
  • 我想我应该指定,jLabels 需要都在同一行。

标签: java swing jlabel layout-manager centering


【解决方案1】:

BoxLayout 的布局需要沿Y_AXIS 进行,以使任何中心对齐都有效。在BorderLayout 的情况下,虽然可以水平放置 3 个组件(WESTCENTEREAST),但它们分布不均。同样,FlowLayout 虽然允许组件居中对齐,但不会均匀分布它们。

最简单的方法是使用GridLayout

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

【讨论】:

  • 我添加了一个编辑...我假设说我想表示二进制意味着我希望所有标签都是水平的。此外,FlowLayout 实际上似乎并不想尊重我喜欢的尺寸。