java javaFx标签wrapText不起作用
我是一名新开发人员,我试图制作一个程序。在我的程序中有一个消息列表(listMessages
),其中的每条消息都是我创建的一个MessageItemController
(自定义控件),其中包含一个标签和一些其他内容。在MessageItemController
中VBox
的Sudo代码:
<VBox fx:id="VBoxContent" GridPane.columnIndex="1" GridPane.rowIndex="1" GridPane.vgrow="ALWAYS">
<children>
<Label fx:id="lblMessage" text="message" textOverrun="CLIP" wrapText="true">
<padding>
<Insets left="10.0" />
</padding>
</Label>
...
</children>
</VBox>
我希望VBoxContent
具有最大宽度。之前,我为我的VBoxContent
设置了一个MaxWidth
,例如300px。(我在scenebuilder和我的fxml文件中执行此操作,但不使用代码)。这工作做得很好。我添加到listMessages
工作中的所有信息
现在我改变了我的想法,我希望MessageItemController
有maxWidth,但只有其父级的0.5%(我的意思是listMessages
,我将此消息添加到它们中)。因此,我从fxml文件中删除了maxWidth
,并在控制器中添加了以下代码:
listMessages.widthProperty().addListener((observable, oldValue, newValue) -> {
if (observableListMessages != null)
observableListMessages.forEach(x -> {
x.VBoxContent.setMaxWidth(0.5 * newValue.doubleValue());
});
});
但是如果我从代码(不是fxml)为我的VBox
设置MaxWidth
(甚至PrefWidth
),标签的wrapText
可能不起作用
能帮我解决问题吗?如果你能说我如何做文本包装,或者如果这是不可能的,这是javafx的问题,那么如果有任何想法来实现我的目的,请说出来
我很抱歉英语不好。谢谢
# 1 楼答案
在FXML中用一个名为
TextFlow
的东西包装文本。这会帮你省去很多麻烦# 2 楼答案
您需要为
Label
本身设置prefWidth
下面是一个简短的演示应用程序:
在为
Label
设置首选宽度之前,它并不真正知道要从哪里开始包装如果希望标签以
VBox
的大小包装,可以将Label
的PrefWidthProperty
绑定到VBox
的WidthProperty
上:这样做将允许文本填充其容器的宽度,但如果太长,则将其包裹