在没有事件的情况下检索 JavaFX 中的鼠标位置
Retrieve mouse position in JavaFX without event
我想在显示舞台之前检索当前鼠标位置的 x 和 y 坐标。
到目前为止,我发现在 JavaFX 中获取鼠标位置的唯一方法是在 MouseEvent
内,这不适用于我的情况。此外,我发现可以通过 java.awt.MouseInfo
检索位置。但是,我认为这是一个坏主意(我使用 JavaFX 而不是 AWT),至少在我的情况下,会导致 HeadlessException
.
是否有其他干净的可能性来检索 JavaFX 中的鼠标位置而不会太黑(例如,模拟 MouseEvent 只是为了获取位置)?
非常感谢!
好吧,您可以使用 Robot class 获取鼠标坐标。这是一个例子。
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(初级 OS)上尝试过并且有效。
更新:
经过一些谷歌搜索后,我发现 TestFX 看起来像是为 Robot class 实现原型的尝试。看看下面给出的链接。
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);
}
正如 建议的那样,机器人 class 似乎是满足您需求的一种不错的方式。
我认为使用 javafx.scene.robot.Robot
的 Robot 的 JavaFX 版本更合适。
您可以简单地使用 getMousePosition()
方法,其中 returns 当前鼠标 (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 应用程序线程上构建和使用。
我想在显示舞台之前检索当前鼠标位置的 x 和 y 坐标。
到目前为止,我发现在 JavaFX 中获取鼠标位置的唯一方法是在 MouseEvent
内,这不适用于我的情况。此外,我发现可以通过 java.awt.MouseInfo
检索位置。但是,我认为这是一个坏主意(我使用 JavaFX 而不是 AWT),至少在我的情况下,会导致 HeadlessException
.
是否有其他干净的可能性来检索 JavaFX 中的鼠标位置而不会太黑(例如,模拟 MouseEvent 只是为了获取位置)?
非常感谢!
好吧,您可以使用 Robot class 获取鼠标坐标。这是一个例子。
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(初级 OS)上尝试过并且有效。
更新: 经过一些谷歌搜索后,我发现 TestFX 看起来像是为 Robot class 实现原型的尝试。看看下面给出的链接。 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);
}
正如
我认为使用 javafx.scene.robot.Robot
的 Robot 的 JavaFX 版本更合适。
您可以简单地使用 getMousePosition()
方法,其中 returns 当前鼠标 (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 应用程序线程上构建和使用。