JavaFX:在ImageView上单击x和y像素坐标

JavaFX:在ImageView上单击x和y像素坐标,java,javafx,Java,Javafx,我在滚动窗格中有一个ImageView。我可以通过向滚动窗格添加一个侦听器来获取鼠标单击事件。但是,我想得到点击图像上像素的x和y坐标 更为复杂的是,图像可以放大和缩小,但一旦我知道我在做什么,我可能就会明白这一点。将鼠标侦听器添加到图像视图而不是滚动窗格 下面是一个简单的例子: import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.ScrollPane; imp

我在滚动窗格中有一个ImageView。我可以通过向滚动窗格添加一个侦听器来获取鼠标单击事件。但是,我想得到点击图像上像素的x和y坐标


更为复杂的是,图像可以放大和缩小,但一旦我知道我在做什么,我可能就会明白这一点。

将鼠标侦听器添加到
图像视图
而不是
滚动窗格

下面是一个简单的例子:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ScrollPane;
import javafx.scene.image.ImageView;
import javafx.stage.Stage;

public class ClickOnScrollingImage extends Application {

    private static final String IMAGE_URL = "https://www.nasa.gov/sites/default/files/styles/full_width_feature/public/thumbnails/image/crop_p_color2_enhanced_release_small.png?itok=5BtHNey_" ;


    @Override
    public void start(Stage primaryStage) {
        ScrollPane scroller = new ScrollPane();
        ImageView imageView = new ImageView(IMAGE_URL);
        scroller.setContent(imageView);

        // the following line allows detection of clicks on transparent
        // parts of the image:
        imageView.setPickOnBounds(true);

        imageView.setOnMouseClicked(e -> {
            System.out.println("["+e.getX()+", "+e.getY()+"]");
        });
        Scene scene = new Scene(scroller, 600, 600);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

将鼠标侦听器添加到
图像视图
而不是
滚动窗格

下面是一个简单的例子:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ScrollPane;
import javafx.scene.image.ImageView;
import javafx.stage.Stage;

public class ClickOnScrollingImage extends Application {

    private static final String IMAGE_URL = "https://www.nasa.gov/sites/default/files/styles/full_width_feature/public/thumbnails/image/crop_p_color2_enhanced_release_small.png?itok=5BtHNey_" ;


    @Override
    public void start(Stage primaryStage) {
        ScrollPane scroller = new ScrollPane();
        ImageView imageView = new ImageView(IMAGE_URL);
        scroller.setContent(imageView);

        // the following line allows detection of clicks on transparent
        // parts of the image:
        imageView.setPickOnBounds(true);

        imageView.setOnMouseClicked(e -> {
            System.out.println("["+e.getX()+", "+e.getY()+"]");
        });
        Scene scene = new Scene(scroller, 600, 600);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

您是否尝试过getSceneX或getScreenX或getX?那么y呢?这两个都在屏幕上显示x,而不是图像。您是否尝试过getSceneX或getScreenX或getX?那么y呢?它们都在屏幕上显示x,而不是图像。鼠标侦听器在ImageView中不起作用。我必须将它添加到ScrollPane中,并检查getTarget()是否是ImageView。它确实适用于不同的图像。图像中的透明像素正在阻止事件工作。但如果imageview已调整大小(拉伸图片,像素看起来会变大或变小),则无法工作。在这种情况下,鼠标getX/getY坐标不再与像素坐标匹配。鼠标侦听器在ImageView中不工作。我必须将它添加到ScrollPane中,并检查getTarget()是否是ImageView。它确实适用于不同的图像。图像中的透明像素正在阻止事件工作。但如果imageview已调整大小(拉伸图片,像素看起来会变大或变小),则无法工作。在这种情况下,鼠标getX/getY坐标不再与像素坐标匹配。