从AnchorPane获取可见元素

时间:2018-08-23 09:38:59

标签: javafx bounds

我正在开发JavaFX应用程序,用户可以在其中缩放和拖动元素(所有元素都包含在AnchorPane中)。这些元素中的一些是简单的线条,即使用户缩放或拖动提到的AnchorPane,我也需要具有类似标尺的东西,但其父对象要在屏幕上的相同位置粘贴。我几乎可以使用所有的东西,但是有一个问题,我需要知道用户对AnchorPane的哪些行是可见的(就像用户缩放和拖动AnchorPane一样,其中一些行不再可见)。这是我尝试过的(不起作用...)

private List<Double> getVisibleVerticalLinesXCoordonate() {

        List<Double> xCoordonatesOfVisibleVerticalLines = new ArrayList<>();
        List<Node> visibleNodes = new ArrayList<>();
        Bounds bounds = rulerParent.getBoundsInLocal();
        Bounds paneBounds = rulerParent.localToScene(bounds);
        for (Node n : gridVerticalLines) {
            Bounds nodeBounds = n.getBoundsInParent();
            if (paneBounds.intersects(nodeBounds)) {
                visibleNodes.add(n);
            }
        }

        for (Node node : visibleNodes) {
            Bounds newBounds = getRelative(node);
            xCoordonatesOfVisibleVerticalLines.add(newBounds.getMinX());
        }
        System.out.println(Arrays.asList(xCoordonatesOfVisibleVerticalLines));
        return xCoordonatesOfVisibleVerticalLines;
    }

private Bounds getRelative(Node node) {
        return rulerParent.sceneToLocal(node.localToScene(node.getBoundsInLocal()));
    }

因此,rulerParent是屏幕上固定的(根本没有缩放或拖动)。从AnchorPane中看到可见线后,我得到了相对于rulerParent的线的x坐标-这样我就可以将标尺线与AnchorPane中的线对齐。 问题在于这没有返回实际的可见线...

我不需要看到整条线就可以看到它,这就是为什么我要使用相交...如果某条线的任何部分可见,我就需要它。

1 个答案:

答案 0 :(得分:-1)

这是关于如何处理缩放动作的尝试,尝试使用ViewPort而不是像ViewPort那样进行缩放,您可以知道ViewPort的平移X和Y坐标,即AnchorPane

的可见X和Y坐标