JavaFx TableView如何判断ScrollBar是否可见

时间:2018-06-28 05:49:21

标签: tableview javafx-8 scrollbar

基于this example(选项1),我通过在TableView中使用2个SplitPane来创建固定列。 显示其他列(而不是固定列)的TableView可能会太宽,以致显示ScrollBar,为此我必须用-fx-padding: 0 0 13px 0;进行补偿才能保留{{ TableRow的1}}个对齐。

因此,我现在必须确定是否显示TableView或找到一种完全不同的方法来确保ScrollBar的对齐方式。不幸的是,这种明显的方法似乎没有用。 (TableRow不是ScrollBar,我只是没有发布代码来确保这一点)

null

由于某些原因,ScrollBar horizontalScrollBar = (ScrollBar) lookup(".scroll-bar:horizontal"); horizontalScrollBar.visibleProperty().addListener((observable, oldValue, newValue) -> { System.out.println(newValueobservableScrollBar); }); 出现或消失时不会触发监听器。

1 个答案:

答案 0 :(得分:0)

因此,为了弄清楚某个滚动条是否可见,我首先必须找到它,因此我查找了该特定表上的所有滚动条。

Set<Node> scrollBars = itemsTableView.lookupAll(".scroll-bar");

然后过滤集合以检索我要查找的特定滚动条(在我的情况下为水平)

Optional<Node> horizontalScrollBar = scrollBars.stream()
          .filter(node ->
            ((ScrollBar) node).getOrientation().equals(Orientation.HORIZONTAL))
          .findAny();

然后将侦听器附加到滚动条的可见性

horizontalScrollBar.ifPresent(node ->
          node.visibleProperty().addListener((observable, oldValue, newValue) -> {
                    if(newValue)
                    {
                        columnTableView.setStyle("-fx-padding: 0 0 13px 0;");
                    } else
                    {
                        columnTableView.setStyle("-fx-padding: 0 0 0 0;");
                    }
              })
        );

看起来几乎完全正确吗?好吧,一想到

lookup(".scroll-bar:horizontal");

不返回水平滚动条,而是返回第一个(垂直)滚动条。除非您意识到这一点,否则您的应用程序将表现得有些神秘。