首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaFx TableView如何判断ScrollBar是否可见

JavaFx TableView如何判断ScrollBar是否可见
EN

Stack Overflow用户
提问于 2018-06-28 05:49:20
回答 1查看 1.4K关注 0票数 2

基于this example (选项1),我正在通过在SplitPane中使用2个TableView来创建一个固定列。显示其他列(而不是固定列)的TableView可能会变得非常宽,从而显示一个ScrollBar,为了保持两个TableViewTableRow对齐,我必须用-fx-padding: 0 0 13px 0;进行补偿。

因此,我现在必须弄清楚ScrollBar是否正在显示,或者找到一种完全不同的方法来确保TableRow对齐。不幸的是,显而易见的方法似乎不起作用。( ScrollBar不是null,我只是没有发布代码以确保

代码语言:javascript
运行
复制
ScrollBar horizontalScrollBar = (ScrollBar) lookup(".scroll-bar:horizontal");
horizontalScrollBar.visibleProperty().addListener((observable, oldValue, newValue) -> {
    System.out.println(newValueobservableScrollBar);
});

由于某些原因,当ScrollBar出现或消失时,侦听器不会被触发。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-02 08:32:13

因此,为了弄清楚一个特定的滚动条是否是visibile,我首先必须找到它,所以我查找了那个特定表上的所有滚动条。

代码语言:javascript
运行
复制
Set<Node> scrollBars = itemsTableView.lookupAll(".scroll-bar");

然后过滤集合,以检索我正在寻找的特定滚动条(在我的例子中是水平的)。

代码语言:javascript
运行
复制
Optional<Node> horizontalScrollBar = scrollBars.stream()
          .filter(node ->
            ((ScrollBar) node).getOrientation().equals(Orientation.HORIZONTAL))
          .findAny();

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

代码语言:javascript
运行
复制
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;");
                    }
              })
        );

看上去有点简单,对吧?是的,一旦你发现

代码语言:javascript
运行
复制
lookup(".scroll-bar:horizontal");

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51075499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档