作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个简单的JavaFX应用程序,其中文本以编程方式添加到位于滚动 Pane 中的VBox(这样,当文本太多时,可以滚动窗口以查看整体的其他部分)。
我的问题是我的文本不换行:它们只是在一行中超出窗口。
使用前面的 StackOverflow 答案,我连续尝试过:
这些都没有任何区别(除了水平滚动条的消失,这是毫无意义的,因为无论如何你都可以通过平移来滚动)。
这是我的 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/
我是一名优秀的程序员,十分优秀!