我正在开发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中的线对齐。
问题在于这没有返回实际的可见线...
我不需要看到整条线就可以看到它,这就是为什么我要使用相交...如果某条线的任何部分可见,我就需要它。
答案 0 :(得分:-1)
这是关于如何处理缩放动作的尝试,尝试使用ViewPort
而不是像ViewPort
那样进行缩放,您可以知道ViewPort
的平移X和Y坐标,即AnchorPane