如果稍后将其初始化为已知字符串,如何确定将 JLabel 设置为的正确大小

How to determine the correct size to set a JLabel to if it's going to be initialized later to a known String

我有一个 JLabel,它在创建时将是空白的。 稍后它将被初始化为字符串 "Hello World"

如果我稍后将 setText 设置为 "Hello World",我的整个布局就会搞砸(FWIW,我正在使用 GridBagLayout)。

这是我找到的避免此问题的唯一方法。

JLabel tmp = new JLabel("Hello World");
Dimension d = tmp.getPreferredSize();

JLabel actual = new JLabel();
actual.setPreferredSize(d);

没有更好的方法吗?

问题的完整背景是什么?为什么大小改变如此重要?大小的变化会影响 GridBagLayout 的网格吗?

也许您需要更好地设计窗体,以便改变标签文本中的大小不会影响窗体上其他组件的布局?也就是说,也许您需要使用不同的布局管理器嵌套不同的面板。

例如,您可以使用带有 CardLayout 的面板,然后将每个标签作为面板的卡片。然后,您不更改文本,而是交换标签。这样,面板将为布局中最大的卡片保留 space。