JavaFx:绑定TableView&ScrollPane的滚动条

时间:2017-10-19 11:03:03

标签: java javafx javafx-8 scrollbar bind

我尝试以某种方式绑定TableView滚动到ScrollPane的滚动条。 我可以从两个滚动条中获取引用,但我无法绑定它们。 我还发现滚动条的值不同, TableView的滚动条的值介于0和100之间,而Scrollpane的值介于0和1之间。

到目前为止,我已尝试过:

我如何得到参考:

private static ScrollBar getScrollBar(Control source) {
        ScrollBar scrollBar = null;
        for (Node node : source.lookupAll(".scroll-bar")) {
            if (node instanceof ScrollBar && ((ScrollBar) node).getOrientation().equals(Orientation.HORIZONTAL)) {
                scrollBar = (ScrollBar) node;
            }
        }
        return scrollBar;
}

然后:

public static void bindScrollBars(ScrollPane scrollPane, TableView<?> table) {
        ScrollBar scrollBarPane = getScrollBar(scrollPane);
        ScrollBar scrollBarTable = getScrollBar(table);
        scrollBarPane.valueProperty().bindBidirectional(scollBarTable.valueProperty())
}

这种方式适用于绑定本身但我需要绑定乘以或除以100以将它们缩放到相同的级别。 如果我尝试添加.multyply(100).divide(100)因为显而易见的原因而无法工作,但我不知道如何将它们双向绑定到同一级别或0..100或0..1。 你能提出任何解决方案吗?

第二个问题是如果我能得到前一个的解决方案,那么我怎么能绑定两个以上Control的滚动条?例如,如果我有4 Control s(ScrollPane,TableView,TreeTableView,TreeTableView),我如何确保所有这些组件&#39; scollbars彼此绑定?

P.S。如果我尝试不使用双向绑定,只需绑定例如:

scrollBarPane.valueProperty().bind(scrollBarTable.valueProperty().divide(100));

我收到一个RuntimeException,消息为:ScrollBar.value: A bound value cannot be set.

0 个答案:

没有答案