JavaFX-сделать ScrollPane прокрутки автоматически


У меня есть метка в scrollpane. Я обновляю метку в цикле (в другом потоке). Как я могу обновить панель прокрутки, чтобы она прокручивалась вниз (не в сторону, это будет сделано вручную), если пользователь не удерживает ее в определенном положении? Есть ли для этого сеттер?

6 5

6 ответов:

Чтобы установить ScrollPane в нижней части автоматически установите vvalue элемента ScrollPane, как это:

@FXML private ScrollPane scroll; //this must match the fx:id of the ScrollPane element
scroll.setVvalue(1.0);           //1.0 means 100% at the bottom

Если вы используете HBox или VBox в пределах ScrollPane, попробуйте следующее:

hBox.heightProperty().addListener(new ChangeListener() {
    @Override
    public void changed(ObservableValue observable, Object oldvalue, Object newValue) {
        scrollPane.setHvalue((Double)newValue );  
    }
});

@Math спасибо, это сработало!

@FXML private ScrollPane scroll; //this must match the fx:id of the ScrollPane element or be the scrollpane object
scroll.setVvalue(1.0);           //1.0 means 100% at the bottom

И я решил проблему "должен смотреть на вкладку" с этой частью кода

tab.setOnSelectionChanged(new EventHandler<Event>() {
    @Override
    public void handle(Event arg0) {
        ScrollPane.setVvalue(1.0);
    }        
});

Это работает в моем коде:

scrollPane.vvalueProperty().bind(mainGrid.heightProperty());

В моем случае scrollPane содержит mainGrid

Чтобы полностью прокрутить панель прокрутки вниз, установите ее vvalue СВОЙСТВО to 1.0:

scrollPane.setVvalue(1D);

Примечание это может не сработать при вызове после изменения размера содержимого области прокрутки.
В таком случае, если задержка вызова через Platform.runLater() не устраняет проблему, рассмотрите возможность установки значения свойства в ответ на содержимое height СВОЙСТВО событие признания недействительным:

vBox.heightProperty().addListener(observable -> scrollPane.setVvalue(1D));

Это должно сделать трюк:

// adding a new row
vbox_event.addEventRow((Integer) null, null);
// scroll to bottom
Platform.runLater(new Runnable() {
    @Override
    public void run() {
        scrollpane.setVvalue(1.0);
    }
});