Я пытаюсь создать простое приложение JavaFX, в котором тексты программно добавляются в VBox, расположенный в области прокрутки (чтобы при слишком большом количестве текстов окно можно было прокручивать для просмотра других частей в целом).
Моя проблема в том, что мои тексты не переносятся: они просто выходят из окна на одну строку.
Используя предыдущие ответы StackOverflow, я последовательно пытался:
- отключение горизонтальной прокрутки моей полосы прокрутки,
- установка ScrollPane с помощью fitToWidth = "true"
- привязка моего свойства 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 width с помощью:
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 выводится, но текст не переносится ... теперь я в замешательстве.