使用FXML在VBox中换行标签文本

6
我正在编写一个JavaFX应用程序,并想创建一个包含两个长文本的屏幕。我不知道文本是什么,它将在运行时由一些代码填充。
为此,我想使用VBox和2个标签。我假设如果我不添加尺寸,标签将跨越VBox。由于文本很长,我希望它自动换行。
以下是我尝试的FXML:
<VBox spacing="20" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <Label fx:id="label1" text="Dummy Text" wrapText="true" />   
      <Label fx:id="label2" text="Dummy Text" wrapText="true" />  
   </children>
</VBox>

这不起作用是因为文本没有换行,而只是超出了窗口的右侧。我需要什么才能使其正常工作?

2个回答

8
尝试设置prefWidth和prefHeight,因为您的标签不知道何时开始换行。
<VBox prefHeight="100.0" prefWidth="300.0"  ...

如果这不起作用,请尝试在 HBox 的父容器上使用它。 你正在使用Scene Builder吗?我建议你使用它。 良好运作(自动生成):
<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="333.0" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1">
   <center>
      <VBox prefHeight="200.0" prefWidth="325.0" BorderPane.alignment="CENTER">
         <children>
            <Label text="Wrap text Wrap text Wrap text Wrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap textWrap text" wrapText="true" />
            <Label layoutX="10.0" layoutY="10.0" text="just textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust textjust text" />
         </children>
      </VBox>
   </center>
</BorderPane>

3
我不确定我理解为什么这样能行,但它确实有效。谢谢。 - Sander Smith
6
@SanderSmith,这概括了我使用JavaFX的经验。 - mre
从中最重要的一点可能是wrapText="true"属性。 - Lerk

2

如果您在使用class名称“label1”和“label2”的样式表,那么在fxml代码中设置wrapText="true"将不起作用。

  1. 您可以尝试删除id,同时保留wrapText="true",看看它是否会自动换行。

或者

  1. 将一些CSS代码添加到该CSS文件中,以使文本换行,例如在特定类中添加-fx-word-wrap: break-word;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接