gpt4 book ai didi

JavaFX ScrollPane - 检查显示哪些组件

转载 作者:行者123 更新时间:2023-12-04 23:19:45 27 4
gpt4 key购买 nike

我想知道 JavaFX 8 中是否有一个 ScrollPane 属性可以用来监听当前在给定时间显示的组件。
例如,
ScrollPane 有一个 VBox,它有 8 个按钮。在滚动 Pane 中只能看到 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 及其子项的场景坐标。

enter image description here

如果您希望它们在属性中,只需创建您自己的 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

关于JavaFX ScrollPane - 检查显示哪些组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30780005/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com