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

Java 如何确定将JLabel设置为的正确大小,如果它';稍后将初始化为已知字符串,java,swing,size,jlabel,Java,Swing,Size,Jlabel,我有一个JLabel,在创建时它将是空白的。 稍后,它将被初始化为字符串“Hello World” 如果我稍后将文本设置为“Hello World”,我的整个布局就会出错(FWIW,我使用的是GridBagLayout) 这是我发现的避免这个问题的唯一方法 JLabel tmp = new JLabel("Hello World"); Dimension d = tmp.getPreferredSize(); JLabel actual = new JLabel(); actual.setPr

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

如果我稍后将文本设置为“Hello World”,我的整个布局就会出错(FWIW,我使用的是GridBagLayout)

这是我发现的避免这个问题的唯一方法

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

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

没有比这更好的方法了吗?

问题的完整背景是什么?如果尺寸发生变化,为什么它如此重要?大小的更改是否会影响GridBagLayout的网格

也许您需要对表单进行更好的设计,以便标签文本中不断变化的大小不会影响表单上其他组件的布局?也就是说,可能需要用不同的布局管理器嵌套不同的面板


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

因为它是一个标签。。。您尝试过setVisible吗?@HoverCraftFullOfeel填充空格仅适用于固定宽度字体。您可以扩展JLabel并覆盖其
getPreferredSize
,使其永远不会小于使用一些最小文本时的大小。填充空格仅适用于固定宽度字体。!=诚然,为了更好地帮助您更快发布SSCCE/MCVE,简短、可运行、可编译,请使用JTextField,设置为您需要的字符数,去掉边框,使其透明且不可编辑