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 的文本会溢出点 (...)。
更改此 属性 :
- 以编程方式使用 setWrapText()
- 使用 JavaFX CSS
fx-wrap-text
参见 CSS Reference
我让它正常工作的方法是在标签的 every 父组件中使用 USE_PREF_SIZE 的 maxHeight 和 USE_COMPUTED_SIZE 的 prefHeight(以及对于包含标签的 gridPane 的行)。
我有一个 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 的文本会溢出点 (...)。
更改此 属性 :
- 以编程方式使用 setWrapText()
- 使用 JavaFX CSS
fx-wrap-text
参见 CSS Reference
我让它正常工作的方法是在标签的 every 父组件中使用 USE_PREF_SIZE 的 maxHeight 和 USE_COMPUTED_SIZE 的 prefHeight(以及对于包含标签的 gridPane 的行)。