JavaFX 标签不更新高度

JavaFX Label not updating height

我有一个 Label 来显示一些初始化的文本,里面没有文本。然后我在我的 main window 中添加一个新节点,其中的标签是这样的:

    Parent root = null;
try{
    FXMLLoader loader = new FXMLLoader(getClass().getResource("/resources/message.fxml"));
    root = loader.load();
    ObsMessage obsMessage = loader.getController();

    obsMessage.definirMessage( This is where my label's text is modified);

} catch(IOException e){
    e.printStackTrace();
}
vboxPrincipale.getChildren().add(root);`

所以当我的标签超过几行高时,我得到以下结果:

我将标签的 pref 高度设置为 USE_COMPUTED_SIZE,将 Vgrow 设置为始终,以及它的父组件。如果我在将节点初始化为 500px 高时手动设置标签的高度,它会调整大小。 那么为什么我的标签没有调整大小?

编辑:用于生成消息气泡的 FXML 文件:

<BorderPane fx:id="borderPaneMessage" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="130.0" minWidth="-Infinity" prefWidth="970.0" style="-fx-background-color: WHITE; -fx-border-color: BLACK; -fx-border-width: 2;" stylesheets="@styleFenetre.css" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="vue.javafxobservers.ObsMessage">
   <top>
      <GridPane BorderPane.alignment="CENTER">
         <columnConstraints>
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
         </columnConstraints>
         <rowConstraints>
            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
         </rowConstraints>
         <Text fx:id="texteNom" strokeType="OUTSIDE" strokeWidth="0.0" text="Prenom nom" GridPane.halignment="LEFT" GridPane.valignment="CENTER">
            <GridPane.margin>
               <Insets bottom="5.0" left="10.0" right="5.0" top="5.0" />
            </GridPane.margin>
         </Text>
         <Text fx:id="texteDate" strokeType="OUTSIDE" strokeWidth="0.0" text="Date" GridPane.columnIndex="1" GridPane.halignment="RIGHT" GridPane.valignment="CENTER">
            <GridPane.margin>
               <Insets bottom="5.0" left="5.0" right="10.0" top="5.0" />
            </GridPane.margin>
         </Text>
      </GridPane>
   </top>
   <center>
      <GridPane BorderPane.alignment="CENTER">
         <BorderPane.margin>
            <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
         </BorderPane.margin>
         <columnConstraints>
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" />
         </columnConstraints>
         <rowConstraints>
            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="NEVER" />
            <RowConstraints maxHeight="1.7976931348623157E308" valignment="TOP" vgrow="ALWAYS" />
         </rowConstraints>
         <Label fx:id="texteTitre" text="Titre message" wrapText="true">
            <GridPane.margin>
               <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
            </GridPane.margin>
         </Label>
         <Label fx:id="texteMessage" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" text="Texte du corp du message ici..." wrapText="true" GridPane.halignment="LEFT" GridPane.hgrow="ALWAYS" GridPane.rowIndex="1" GridPane.valignment="TOP" GridPane.vgrow="ALWAYS">
            <GridPane.margin>
               <Insets left="5.0" right="5.0" top="5.0" />
            </GridPane.margin>
         </Label>
      </GridPane>
   </center>
   <bottom>
      <HBox fx:id="boxCommandes" alignment="BOTTOM_RIGHT" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" BorderPane.alignment="CENTER">
         <Hyperlink fx:id="linkModifier" alignment="BOTTOM_RIGHT" text="modifier" textFill="#0000ee" />
         <Hyperlink fx:id="linkSupprimer" alignment="BOTTOM_RIGHT" text="supprimer" textFill="#0000ee" />
      </HBox>
   </bottom>
</BorderPane>

JavaFX 中的标签有一个 wrapText 布尔值 属性。

默认情况下 属性 设置为 false 这就是为什么超过默认值 space 的文本会溢出点 (...)。

更改此 属性 :

  1. 以编程方式使用 setWrapText()
  2. 使用 JavaFX CSS fx-wrap-text 参见 CSS Reference

我让它正常工作的方法是在标签的 every 父组件中使用 USE_PREF_SIZE 的 maxHeight 和 USE_COMPUTED_SIZE 的 prefHeight(以及对于包含标签的 gridPane 的行)。