加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

JavaFX ScrollPane – 检查显示的组件

发布时间:2020-12-15 04:28:07 所属栏目:Java 来源:网络整理
导读:我想知道 JavaFX 8中是否有ScrollPane属性可用于侦听当前在给定时间显示的组件. 例如, ScrollPane有一个VBox,有8个按钮.滚动窗格中只能看到4个按钮.我想要一个监听器,它会在滚动位置发生变化时显示8个按钮中的4个. 解决方法 您可以检查节点是否可见: privat
我想知道 JavaFX 8中是否有ScrollPane属性可用于侦听当前在给定时间显示的组件.
例如,
ScrollPane有一个VBox,有8个按钮.滚动窗格中只能看到4个按钮.我想要一个监听器,它会在滚动位置发生变化时显示8个按钮中的4个.

解决方法

您可以检查节点是否可见:

private List<Node> getVisibleNodes(ScrollPane pane) {
    List<Node> visibleNodes = new ArrayList<>();
    Bounds paneBounds = pane.localToScene(pane.getBoundsInParent());
    if (pane.getContent() instanceof Parent) {
        for (Node n : ((Parent) pane.getContent()).getChildrenUnmodifiable()) {
            Bounds nodeBounds = n.localToScene(n.getBoundsInLocal());
            if (paneBounds.intersects(nodeBounds)) {
                visibleNodes.add(n);
            }
        }
    }
    return visibleNodes;
}

此方法返回所有可见节点的列表.
它所做的只是比较ScrollPane及其子项的场景坐标.

如果你想在属性中创建自己的ObservableList:

private ObservableList<Node> visibleNodes;

visibleNodes = FXCollections.observableArrayList();

ScrollPane pane = new ScrollPane();
pane.vvalueProperty().addListener((obs) -> {
    checkVisible(pane);
});
pane.hvalueProperty().addListener((obs) -> {
    checkVisible(pane);
});

private void checkVisible(ScrollPane pane) {
    visibleNodes.setAll(getVisibleNodes(pane));
}

有关完整代码,请参阅BitBucket

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读