Как изменить размер содержимого JavaFX ScrollPane в соответствии с текущим размером
у меня есть BorderPane
С ScrollPane
как центральный элемент. Он автоматически изменяется, чтобы заполнить экран. Внутри ScrollPane
это HBox
это не имеет контента, но является целью перетаскивания. Поэтому я хочу, чтобы он заполнил своего родителя ScrollPane
.
что это предпочтительный способ сделать это?
то, что я пробовал до сих пор, переопределяет ScrollPane.resize(...)
метод для изменения размера HBox
но это кажется довольно сложным и необычным.
edit: добавить полезный код для этого я могу обойти проблему, но я считаю, что должен быть какой-то лучший способ сделать это:
@Override
public void resize(double width, double height) {
super.resize(width, height);
double scrollBarHeight = 2;
double scrollBarWidth = 2;
for (final Node node : lookupAll(".scroll-bar")) {
if (node instanceof ScrollBar) {
ScrollBar sb = (ScrollBar) node;
if (sb.getOrientation() == Orientation.HORIZONTAL) {
System.out.println("horizontal scrollbar visible = " + sb.isVisible());
System.out.println("width = " + sb.getWidth());
System.out.println("height = " + sb.getHeight());
if(sb.isVisible()){
scrollBarHeight = sb.getHeight();
}
}
if (sb.getOrientation() == Orientation.VERTICAL) {
System.out.println("vertical scrollbar visible = " + sb.isVisible());
System.out.println("width = " + sb.getWidth());
System.out.println("height = " + sb.getHeight());
if(sb.isVisible()){
scrollBarWidth = sb.getWidth();
}
}
}
}
hBox.setPrefSize(width-scrollBarWidth, height-scrollBarHeight);
}
код частично взят отсюда: как получить доступ к полосам прокрутки ScrollPane
2 ответов
попробовать
ScrollPane scrollPane = new ScrollPane();
scrollPane.setFitToHeight(true);
scrollPane.setFitToWidth(true);
без переопределения resize()
метод.
задание fitToHeight
или fitToWidth
атрибут через XML
или CSS
:
FXML-файл:
<ScrollPane fx:id="myScrollPane" fitToHeight="true" fitToWidth="true" />
CSS:
.my-scroll-pane {
-fx-fit-to-height: true;
-fx-fit-to-width: true;
}