在没有事件的情况下在JavaFX中检索鼠标位置

时间:2017-07-19 21:06:40

标签: java javafx position cursor mouse

我想在显示舞台之前检索当前鼠标位置的x和y坐标。到目前为止,我发现在JavaFX中获得鼠标位置的唯一方法是MouseEvent,这不适用于我的情况。此外,我发现可以通过java.awt.MouseInfo检索位置。然而,我认为这是一个坏主意(我使用JavaFX而不是AWT),至少在我的情况下,导致HeadlessException。是否有其他干净的可能性来检索JavaFX中的鼠标位置而不会过于苛刻(例如,只是为了获取位置来模拟MouseEvent)?

非常感谢!

2 个答案:

答案 0 :(得分:3)

好吧,你可以使用Robot类获得鼠标坐标。这是一个例子。

com.sun.glass.ui.Robot robot =
                com.sun.glass.ui.Application.GetApplication().createRobot();

        int y = robot.getMouseY();
        System.out.println("y point = " + y);
        int x = robot.getMouseX();
        System.out.println("x point= " + x);

它在linux(基本操作系统)上尝试过它并且有效。

<强>更新: 经过一些谷歌搜索,我发现TestFX看起来像是试图实现Robot类的原型。看看下面给出的链接。 https://github.com/TestFX/Robot http://mail.openjdk.java.net/pipermail/openjfx-dev/2015-December/018412.html

你也可以这样做,以获得坐标。

public void start(Stage primaryStage) throws Exception {
        GlassRobot robot = new GlassRobotImpl();
        Point2D point = robot.getMouseLocation();
        double x = point.getX();
        double y = point.getY();
        System.out.println("y = " + y);
        System.out.println("x = " + x);
        if(x > 10) {
              primaryStage.show();
       }
public static void main(String[] args) {
        launch(args);
    }

答案 1 :(得分:0)

@lambad建议的机器人课似乎是满足您需求的一种不错的方式。

我认为使用JavaFX版本的机器人javafx.scene.robot.Robot更合适。

您可以简单地使用getMousePosition()方法,该方法将当前鼠标(x,y)的屏幕坐标作为javafx.geometry.Point2D返回。

import javafx.scene.robot.Robot;

Robot robot = new Robot();

System.out.println("X is: " + robot.getMousePosition().getX());
System.out.println("Y is: " + robot.getMousePosition().getY());


注意: 机械手对象必须在JavaFX Application Thread上构造和使用。