JavaFX,用鼠标单击在图像上标记坐标

JavaFX,用鼠标单击在图像上标记坐标,javafx,imageview,coordinates,scenebuilder,onmouseclick,Javafx,Imageview,Coordinates,Scenebuilder,Onmouseclick,我试图在JavaFX中制作一个测量工具,在ImageView中使用,我点击图像中的两个点,然后得到它们之间的距离——我已经计算出了这一部分。然而,我也希望能够看到/标记我单击的图像上的位置,但我无法想象如何最好地做到这一点。我将附上测量工具的代码,以便您更好地了解我正在处理的问题。我想它一定在第一个if循环中,在那里我可以将标记设置为(secondposx,secondposy)-但我的问题是,我如何做标记?你有什么好主意吗?:-) 试试这个: Circle c = new Circle(sec

我试图在JavaFX中制作一个测量工具,在ImageView中使用,我点击图像中的两个点,然后得到它们之间的距离——我已经计算出了这一部分。然而,我也希望能够看到/标记我单击的图像上的位置,但我无法想象如何最好地做到这一点。我将附上测量工具的代码,以便您更好地了解我正在处理的问题。我想它一定在第一个if循环中,在那里我可以将标记设置为(secondposx,secondposy)-但我的问题是,我如何做标记?你有什么好主意吗?:-)

试试这个:

Circle c = new Circle(secondposx, secondposy, 5, Color.RED);
anchorPane.getChildren().add(c);
然后,如果要删除它:

anchorPane.getChildren().remove(c);
是的,它就在这个地方

试试这个:

Circle c = new Circle(secondposx, secondposy, 5, Color.RED);
anchorPane.getChildren().add(c);
然后,如果要删除它:

anchorPane.getChildren().remove(c);

是的,它就在这个地方

一个解决方案是将图像视图包装在
窗格
中,并向
窗格
添加适当的形状。即代替

scrollPane.setContent(imgView);

然后呢

Circle marker = new Circle(secondposx, secondposy, 2, Color.SALMON);
imgContainer.getChildren().add(marker);
如果要将标记直接添加到现有的
锚泊盘
(或作为图像视图祖先的任何其他容器),并避免创建其他容器,可以这样做,但需要将坐标从图像视图更改为该容器。可以先获取场景中的坐标,然后从场景坐标更改为容器坐标:

Point2D sceneCoords = new Point2D(e.getSceneX(), e.getSceneY());
Point2D anchorPaneCoords = anchorPane.sceneToLocal(sceneCoords);
Circle marker = new Circle(anchorPaneCoords.getX(), anchorPaneCoords.getY(), 2, Color.CORAL);
anchorPane.getChildren().add(marker);

一种解决方案是将图像视图包装在
窗格中
,并将适当的形状添加到
窗格中
。即代替

scrollPane.setContent(imgView);

然后呢

Circle marker = new Circle(secondposx, secondposy, 2, Color.SALMON);
imgContainer.getChildren().add(marker);
如果要将标记直接添加到现有的
锚泊盘
(或作为图像视图祖先的任何其他容器),并避免创建其他容器,可以这样做,但需要将坐标从图像视图更改为该容器。可以先获取场景中的坐标,然后从场景坐标更改为容器坐标:

Point2D sceneCoords = new Point2D(e.getSceneX(), e.getSceneY());
Point2D anchorPaneCoords = anchorPane.sceneToLocal(sceneCoords);
Circle marker = new Circle(anchorPaneCoords.getX(), anchorPaneCoords.getY(), 2, Color.CORAL);
anchorPane.getChildren().add(marker);

您的图像视图是否在一个锚机内?@MeGoodGuy AnchorPane->BorderPane->ScrollPane->ImageView您的图像视图是否在一个锚机内?@MeGoodGuy AnchorPane->BorderPane->ScrollPane->ImageView谢谢您!我希望你不介意再问一个问题。之后我怎样才能去掉这些痕迹?如果我写imgContainer.getChildren().remove(marker);它只会删除后一个。@Heidi如果你想删除多个,你需要跟踪多个;e、 g.您可能需要几个实例字段
private Circle firstMarker
private Circle secondMarker
。在创建圆时,根据需要将圆指定给这些圆,然后在需要时删除这两个圆。(更一般地说,如果您有很多,您可能需要一个
列表
或类似的列表。)谢谢您,先生!我希望你不介意再问一个问题。之后我怎样才能去掉这些痕迹?如果我写imgContainer.getChildren().remove(marker);它只会删除后一个。@Heidi如果你想删除多个,你需要跟踪多个;e、 g.您可能需要几个实例字段
private Circle firstMarker
private Circle secondMarker
。在创建圆时,根据需要将圆指定给这些圆,然后在需要时删除这两个圆。(更一般地说,如果您有很多,您可能需要一个
列表
或类似的列表。)