我正在尝试创建一个简单的JavaFX应用程序,其中以编程方式将文本添加到位于Scrollpane中的VBox中(这样,当文本过多时,可以滚动窗口以查看整体的其他部分)。 / p>
我的问题是我的文本没有自动换行:它们只是从窗口中出来一行。
使用前面的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);
}
注意:我正在使用全屏界面,因为我希望我的应用在每个屏幕尺寸上都以相同的方式显示。这就是为什么我没有为文本使用固定宽度的原因。
编辑:我尝试了另一件事:将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());
包裹宽度:150,但文本没有包裹...现在我很困惑。
答案 0 :(得分:0)
好的,回答了我自己的问题,我发现正常的过程是将Texts包装在TextFlow对象中。这样做,文本会很好地包裹起来。
我不明白的是,为什么在文档中绝对没有写明即使将ScrollWane的* Box设置为正确的文本也不会包装在ScrollPane中的文本。
说现在正在工作,正在将文本直接添加到TextFlow中,而不是直接添加到Box中,每个人都很高兴。