【发布时间】: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处理的东西。