JavaFX - 使ScrollPane自动滚动

时间:2013-12-02 16:45:07

标签: java user-interface scroll javafx label

我在ScrollPane中有一个Label。我正在循环中更新标签(在另一个线程中)。我如何更新ScrollPane,使其向下滚动(不是侧身,这将手动完成),如果用户没有将其保持在某个位置?它有一个二传手吗?

6 个答案:

答案 0 :(得分:13)

要将ScrollPane设置为底部,请自动设置ScrollPane元素的vvalue,如下所示:

@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

答案 1 :(得分:6)

如果您在ScrollPane中使用HBox或VBox,请尝试以下操作:

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

答案 2 :(得分:3)

这适用于我的代码:

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

在我的例子中,scrollPane包含mainGrid

答案 3 :(得分:2)

@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);
    }        
});

答案 4 :(得分:2)

要将滚动窗格完全滚动到底部,请将其vvalue property设置为1.0

scrollPane.setVvalue(1D);

注意在调整滚动窗格内容的大小后调用时,这可能不起作用 在这种情况下,如果通过Platform.runLater()延迟通话无法解决问题,请考虑设置属性的值以响应内容height property无效事件:

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

答案 5 :(得分:1)

这应该可以解决问题:

// 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);
    }
});