java - 如何在 JavaFX 中换行文本

标签 java javafx javafx-8 fxml

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

我的问题是我的文本不换行:它们只是在一行中超出窗口。

使用前面的 StackOverflow 答案,我连续尝试过:

  • 停用滚动 Pane 的水平滚动,
  • 使用 fitToWidth="true"设置 ScrollPane
  • 将我的文本 widthProperty 绑定(bind)到其中一个封闭布局的 widthProperty
  • 将我的文本 widthProperty 绑定(bind)到场景本身的宽度属性(我想避免这种情况,因为我需要在 Controller 的 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);
} 

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

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

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

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

编辑2:我也尝试过:

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

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

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

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

输出了换行宽度:150,但文本没有换行...现在我很困惑。

最佳答案

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

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

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

关于java - 如何在 JavaFX 中换行文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56381373/

相关文章:

java - Linux Mint Cinnamon 锁定调试与 Eclipse

文本区域中的 JavaFX 多种颜色(JavaFX 8)

java - 如何从 Linux 删除远程 Windows 中的文件夹

javafx - 对齐多个 XYCharts 的 X 轴

performance - javaFX 内存释放,javaFX 错误?

java - 使用 Java 和 JavaFX 设置 WebView 中的文本颜色

JavaFX 折线图性能

java - 我可以使用 Flex Builder 进行 Java 编程吗?

java - 如何使用mockito抛出HttpClientErrorException.Unauthorized错误

java - 如何在 XX :XX:XX time? 处运行方法