JavaFX 鼠标位置
JavaFX MousePosition
我需要在我的应用程序中获取鼠标点击的 x 和 y 坐标。我通过创建一个点在下面的代码中部分解决了它,但我不断获得不同的坐标,具体取决于我在屏幕上移动应用程序的 window 的位置。以后我需要一些常量来识别某些对象。感谢您的帮助!
@Override
public void start(Stage stage) throws Exception {
final Pane root = new Pane();
setWidth(1400);
setHeight(1000);
Canvas background = new Canvas(getWidth(), getHeight());
final GraphicsContext context = background.getGraphicsContext2D();
File f = new File("background.png");
final Image image = new Image(new FileInputStream(f));
root.getChildren().add(background);
root.getChildren().add(b1);
b1.setLayoutX(1300);
b1.setLayoutY(10);
final Canvas animation = new Canvas(getWidth(), getHeight());
final Canvas animation2 = new Canvas(getWidth(), getHeight());
animation.setMouseTransparent(true);
animation2.setMouseTransparent(true);
final GraphicsContext context2 = animation.getGraphicsContext2D();
final GraphicsContext context3 = animation2.getGraphicsContext2D();
root.getChildren().add(animation);
root.getChildren().add(animation2);
Scene scene = new Scene(root, getWidth(), getHeight());
stage.setTitle("Old Gotham");
stage.setScene(scene);
stage.show();
final Duration oneFrameAmt = Duration.millis(1000 / 60);
final KeyFrame oneFrame;
oneFrame = new KeyFrame(oneFrameAmt,
new EventHandler() {
@Override
public void handle(Event event) {
context2.drawImage(image, 0, 0);
int offset = 700;
final Point p = MouseInfo.getPointerInfo().getLocation();
root.setOnMouseClicked(new EventHandler<Event>() {
@Override
public void handle(Event event) {
System.out.println(p.getX());
System.out.println(p.getY());
}
});
}
});
final Timeline tl = new Timeline(oneFrame);
tl.setCycleCount(Animation.INDEFINITE);
tl.play();
}
对于James_D给出的代码,有一个错误:
我不明白你为什么要在关键帧的监听器中设置鼠标监听器,但你需要从鼠标事件中获取坐标。
MouseEvent
定义getX()
和getY()
获取鼠标事件相对于节点本身的坐标,getSceneX()
和getSceneY()
获取鼠标事件相对于整个Scene
的坐标,和(在Java8)getScreenX()
和getScreenY()
得到鼠标事件相对于entrie屏幕坐标的坐标系统.
因此,如果您对鼠标相对于 window(场景)的位置感兴趣,请执行
root.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
System.out.println(event.getSceneX());
System.out.println(event.getSceneY());
}
});
这将提供更准确的鼠标点坐标..
root.setOnMouseClicked(new EventHandler<MouseEvent>()
{
@Override
public void handle(MouseEvent event) {
System.out.println(event.getScreenX());
System.out.println(event.getScreenY());
}
});
我需要在我的应用程序中获取鼠标点击的 x 和 y 坐标。我通过创建一个点在下面的代码中部分解决了它,但我不断获得不同的坐标,具体取决于我在屏幕上移动应用程序的 window 的位置。以后我需要一些常量来识别某些对象。感谢您的帮助!
@Override
public void start(Stage stage) throws Exception {
final Pane root = new Pane();
setWidth(1400);
setHeight(1000);
Canvas background = new Canvas(getWidth(), getHeight());
final GraphicsContext context = background.getGraphicsContext2D();
File f = new File("background.png");
final Image image = new Image(new FileInputStream(f));
root.getChildren().add(background);
root.getChildren().add(b1);
b1.setLayoutX(1300);
b1.setLayoutY(10);
final Canvas animation = new Canvas(getWidth(), getHeight());
final Canvas animation2 = new Canvas(getWidth(), getHeight());
animation.setMouseTransparent(true);
animation2.setMouseTransparent(true);
final GraphicsContext context2 = animation.getGraphicsContext2D();
final GraphicsContext context3 = animation2.getGraphicsContext2D();
root.getChildren().add(animation);
root.getChildren().add(animation2);
Scene scene = new Scene(root, getWidth(), getHeight());
stage.setTitle("Old Gotham");
stage.setScene(scene);
stage.show();
final Duration oneFrameAmt = Duration.millis(1000 / 60);
final KeyFrame oneFrame;
oneFrame = new KeyFrame(oneFrameAmt,
new EventHandler() {
@Override
public void handle(Event event) {
context2.drawImage(image, 0, 0);
int offset = 700;
final Point p = MouseInfo.getPointerInfo().getLocation();
root.setOnMouseClicked(new EventHandler<Event>() {
@Override
public void handle(Event event) {
System.out.println(p.getX());
System.out.println(p.getY());
}
});
}
});
final Timeline tl = new Timeline(oneFrame);
tl.setCycleCount(Animation.INDEFINITE);
tl.play();
}
对于James_D给出的代码,有一个错误:
我不明白你为什么要在关键帧的监听器中设置鼠标监听器,但你需要从鼠标事件中获取坐标。
MouseEvent
定义getX()
和getY()
获取鼠标事件相对于节点本身的坐标,getSceneX()
和getSceneY()
获取鼠标事件相对于整个Scene
的坐标,和(在Java8)getScreenX()
和getScreenY()
得到鼠标事件相对于entrie屏幕坐标的坐标系统.
因此,如果您对鼠标相对于 window(场景)的位置感兴趣,请执行
root.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
System.out.println(event.getSceneX());
System.out.println(event.getSceneY());
}
});
这将提供更准确的鼠标点坐标..
root.setOnMouseClicked(new EventHandler<MouseEvent>()
{
@Override
public void handle(MouseEvent event) {
System.out.println(event.getScreenX());
System.out.println(event.getScreenY());
}
});