【问题标题】:How to wrap a Text in JavaFX如何在 JavaFX 中包装文本
【发布时间】:2019-05-30 15:39:02
【问题描述】:

我正在尝试创建一个简单的 JavaFX 应用程序,其中以编程方式将文本添加到位于滚动窗格中的 VBox(这样,当文本过多时,可以滚动窗口以查看整体的其他部分)。

我的问题是我的文本没有换行:它们只是一行一行地离开窗口。

使用前面的 StackOverflow 答案,我先后尝试:

  • 停用我的滚动窗格的水平滚动,
  • 使用 fitToWidth="true" 设置 ScrollPane
  • 将我的 Texts widthProperty 绑定到其中一个封闭布局的宽度
  • 将我的 Texts widthProperty 绑定到场景本身的宽度属性(我想避免这种情况,因为我需要在控制器的 Initialize() 方法中设置第一个,当场景尚不可用时,它没有无论如何工作)。

这些都没有任何区别(除了水平滚动条的消失,这是毫无意义的,因为无论如何你都可以通过平移来滚动)。

这是我的 fxml:

<BorderPane fx:controller="org.duckdns.spacedock.lifepathfx.PathController" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1">
<center>
<ScrollPane hbarPolicy="NEVER" pannable="true" fitToWidth="true" fx:id="scrollPane" >
    <content>
    <VBox fx:id="mainBox" >

    </VBox>
    </content>
</ScrollPane>
</center>
<top>
<ToolBar>
    <items>
    <Button mnemonicParsing="false" text="Back" onAction="#rollback" />
    </items>
</ToolBar>
</top>

这是我添加文本的代码:

private void displayNewParagraph()
{
Text text = new Text(someFunctionReturningAString());
text.wrappingWidthProperty().bind(mainBox.widthProperty().subtract(15));
mainBox.getChildren().add(text);
} 

注意:我正在使用全屏舞台,因为我希望我的应用在每个屏幕尺寸上都以大致相同的方式显示。这就是为什么我没有为文本使用固定宽度的原因。

编辑:我尝试了另一件事:将 ScrollPane 和 VBox 宽度属性绑定:

mainBox.maxWidthProperty().bind(scrollPane.widthProperty().subtract(10).subtract(10));
mainBox.minWidthProperty().bind(scrollPane.widthProperty().subtract(10).subtract(10));

它所做的只是停用了水平滚动,但文本仍然不换行:所以现在它们走出了窗口,无法完整看到。

Edit2:我也试过了:

text.setWrappingWidth(mainBox.widthProperty().intValue() - 10);

也不起作用:文本根本不会换行。

Edit3:我尝试了这个简单的实验:

text.setWrappingWidth(150);
System.out.println("wrapping width:" + text.getWrappingWidth());

wrapping width:150 被输出,但文字没有换行……现在我很困惑。

【问题讨论】:

  • 我不知道你在用这个做什么,但它听起来像是可以使用 ListView 处理的东西。

标签: java javafx javafx-8 fxml


【解决方案1】:

好吧,回答我自己的问题,我发现正常的程序是将文本包装在 TextFlow 对象中。这样做,文本会很好地换行。

我不明白的是,为什么文档中绝对没有写到如果文本位于 ScrollPane 的 *Box 中,即使您正确设置了它们的换行宽度,它们也不会换行。

也就是说它现在正在工作,文本被直接添加到 TextFlow 而不是 Box 中,每个人都很高兴。

【讨论】:

    猜你喜欢
    • 2019-04-28
    • 1970-01-01
    • 2016-06-12
    • 2012-06-06
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    相关资源
    最近更新 更多