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