【发布时间】:2018-06-17 18:53:06
【问题描述】:
我是新开发人员,我尝试制作一个程序。在我的程序中有一个消息列表(listMessages),其中的每条消息都是我创建的MessageItemController(自定义控件),其中包含一个VBox,其中包含一个标签和其他一些东西。 VBox 在 MessageItemController 中的 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 的问题,所以如果有任何想法可以实现我的目的,请说出来。
我很抱歉英语不好。谢谢。
【问题讨论】: