我有一个标签来显示一些文本,其中的文本是无文字的。然后,我在主窗口内以这种方式在其中添加带有标签的新节点:
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);`
我将标签的首选高度及其父组件设置为USE_COMPUTED_SIZE,并将Vgrow设置为always。如果我在将节点初始化为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
,这就是为什么文本超出默认空格的地方会出现点(...)。
更改此属性之一:
fx-wrap-text
参见CSS Reference他们使它正常工作的方式是在Label的every父组件中使用USE_PREF_SIZE处的maxHeight,在USE_COMPUTED_SIZE处使用prefHeight(对于包含Label的gridPane行)。