Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JLabel.setText()在设置大小后不工作_Java_Swing_Jlabel_Jcomponent - Fatal编程技术网

Java JLabel.setText()在设置大小后不工作

Java JLabel.setText()在设置大小后不工作,java,swing,jlabel,jcomponent,Java,Swing,Jlabel,Jcomponent,我有一个JLabel,按下按钮时需要动态更改它。我正在使用JLabel.setText 然而,它不起作用。我试过: JLabel.repaint() JLabel.validate() JLabel.revalidate() 我觉得奇怪的是,当我不使用以下任何一种设置JLabel的大小时,它工作正常: JLabel.setPrefferedSize() JLabel.setMinimumSize() JLabel.setSize() 在我设置了一个大小属性后,有人能帮我解释为什么它不起作用吗

我有一个JLabel,按下按钮时需要动态更改它。我正在使用JLabel.setText

然而,它不起作用。我试过:

JLabel.repaint()
JLabel.validate()
JLabel.revalidate()
我觉得奇怪的是,当我不使用以下任何一种设置JLabel的大小时,它工作正常:

JLabel.setPrefferedSize()
JLabel.setMinimumSize()
JLabel.setSize()

在我设置了一个大小属性后,有人能帮我解释为什么它不起作用吗?

您的按钮所做的工作可能是一项很长的任务,您希望让用户了解该过程

为此,您必须创建一个执行长任务的新线程,当您为标签设置新文本时,将
label.setText()
语句包装到
invokeLater()


对于在Swing中调整组件的大小,最终由父容器的布局决定组件的大小

例如,在
FlowLayout
中,在组件上调用
setPreferredSize()
setSize()
setMaximumSize()
都会使标签具有该尺寸,而不会在其上调整尺寸。但是,使用
setMinimumSize()
时,它将从该大小开始,然后在该大小之上

对于
BorderLayout
,如果将构件添加到中心,则任何大小调整方法都不会影响构件-它只会占用最大的可用空间


如果将父容器的布局设置为
null
,则可以显式调整组件大小,但是,您将失去与其他布局相同的自动调整大小功能。

解决了我的问题

我使用的是:

JLabel.setPreferredSize(100, JLabel.getheight());
我改为:

JLabel.setPreferredSize(100, 22);
JLabel.setPreferredSize(100,JLabel.getheight())

当您在此处设置首选大小时,JLabel的高度以前一定没有设置:),如果您在设置高度后尝试相同的行,我认为它应该可以正常工作


有时也
JPanel.updateUI()
在此处输入code

请添加到您的问题中。根据提供的有限数据,很难猜出哪里出了问题(这就是我们所能做的)。如果下面的答案都不能令人满意地回答您的问题,我也建议您创建并发布一个。很可能
getHeight()
返回了
0
,因此您的标签没有正确显示的空间,因此根本无法显示。updateUI不供应用程序代码使用!而且是非常次优的(但在QA的环境中不会获得否决票,这有点陈旧),那么updateUI到底用于什么呢?我已经看到它对刷新我的面板有效,但我可能完全错了。
JLabel.setPreferredSize(100, 22);