我想知道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 及其子项的场景坐标。
如果您希望它们出现在 Property 中,只需创建您自己的 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));
}
完整代码请参见比特桶 https://bitbucket.org/kogs/stackoverflow-code-examples
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)