如何在JavaFX8中将鼠标坐标转换为本地到子场景

如何在JavaFX8中将鼠标坐标转换为本地到子场景,java,javafx,3d,geometry,Java,Javafx,3d,Geometry,我有一个主要的舞台,我有一个场景,这个场景包含四个亚场景。我想要得到鼠标点击的坐标,它位于被点击的场景的局部。我知道鼠标在哪个场景被点击,因为所有场景都有各自的事件监听器,但我得到的坐标是(舞台)主场景的坐标。如何将该坐标转换为场景的局部坐标 提前感谢。将听众添加到各个子场景对我来说很好: import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.SubScene; import j

我有一个主要的舞台,我有一个场景,这个场景包含四个亚场景。我想要得到鼠标点击的坐标,它位于被点击的场景的局部。我知道鼠标在哪个场景被点击,因为所有场景都有各自的事件监听器,但我得到的坐标是(舞台)主场景的坐标。如何将该坐标转换为场景的局部坐标


提前感谢。

将听众添加到各个子场景对我来说很好:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.SubScene;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class SubSceneClickTest extends Application {

    @Override
    public void start(Stage primaryStage) {
        GridPane root = new GridPane();
        for (int i = 0 ; i < 4 ; i++) {
            SubScene subScene = new SubScene(new StackPane(), 300, 300);
            subScene.setFill((i + i / 2) % 2 == 0 ? Color.CORNFLOWERBLUE : Color.AQUA);
            String message = "Click on subscene "+i;
            subScene.setOnMouseClicked(e -> System.out.printf("%s [%.1f, %.1f]%n", message, e.getX(), e.getY()));
            root.add(subScene, i / 2, i % 2);
        }
        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
导入javafx.application.application;
导入javafx.scene.scene;
导入javafx.scene.SubScene;
导入javafx.scene.layout.GridPane;
导入javafx.scene.layout.StackPane;
导入javafx.scene.paint.Color;
导入javafx.stage.stage;
公共类SubSceneClickTest扩展了应用程序{
@凌驾
公共无效开始(阶段primaryStage){
GridPane root=新的GridPane();
对于(int i=0;i<4;i++){
SubScene SubScene=新的SubScene(new StackPane(),300300);
亚新世。刚毛填充((i+i/2)%2==0?颜色。矢车菊蓝:颜色。浅绿色);
String message=“单击子场景”+i;
subScene.setOnMouseClicked(e->System.out.printf(“%s[%.1f,%.1f]%n”),消息,e.getX(),e.getY());
根添加(亚场景,i/2,i%2);
}
primaryStage.setScene(新场景(根));
primaryStage.show();
}
公共静态void main(字符串[]args){
发射(args);
}
}

它会给出次场景或主舞台场景的局部事件坐标吗?抱歉,我现在无法尝试。请转到
子场景。这不是你要问的吗
MouseEvent.getX()
getY()
始终位于注册侦听器的节点的坐标系中。是的,这就是我要问的,但是从侦听器获得的鼠标事件提供全局(主舞台/场景)坐标,即使它注册到任何特定的子场景。这就是我从听众那里得到的。我很快也会尝试这个代码。不,不会。它从注册它的节点获取坐标。非常感谢您,James_D,它确实给出了从局部到次场景的坐标。现在我明白我在哪里犯了错误。我是这个方法的加法器(MouseEvent.ANY,mouseEventHandler);添加侦听器。