JavaFX 2 设置/获取光标位置

4

我该如何在JavaFX 2中设置/获取光标位置?

我尝试了谷歌搜索,但没有找到有用的答案。我能做的只是设置光标的样式。

2个回答

6
import java.awt.MouseInfo;
// get the mouse's position
Point p = MouseInfo.getPointerInfo().getLocation();

import java.awt.Robot;
// set the mouse position
new Robot().mouseMove( x, y );

注意:请勿使用com.sun.*类(除非您使用Mac,见下文)。

注意2:由于JavaFX问题,在Mac上无法使用java.awt类,因此如Alexander Kirov所指出的那样,在Mac上仍需要使用com.sun类:

// workaround for Mac only
com.sun.glass.ui.Robot robot =
       com.sun.glass.ui.Application.GetApplication().createRobot();

// getPosition of the mouse in Mac
int x = robot.getMouseX(); 
int y = robot.getMouseY();

AWT机器人在MacOS上与JFX应用程序在同一VM中启动时可能会出现问题,此时一个可能的选择是使用glass机器人。请参见https://dev59.com/12Up5IYBdhLWcg3wXGu8。在这种情况下,glass机器人是私有的,但不太可能危险。 - Alexander Kirov
谢谢你让我知道Mac的问题...但我仍然相信,当人们只想轻松地获取鼠标在屏幕上的位置时,我们应该指向“标准”方向,而不是将这种针对Mac的com.sun黑客建议作为标准。 - Renato
是的,人们应该理解并接受,hach不是官方的方式。它只是在问题情况下有一个选择。 - Alexander Kirov

4
你可以使用机器人来实现这个目的:
AWT机器人: http://docs.oracle.com/javase/1.5.0/docs/api/java/awt/Robot.html 或者Glass机器人:
com.sun.glass.ui.Robot; 可以通过以下方式创建: com.sun.glass.ui.Application.GetApplication().createRobot();
要获取光标位置,请参见关于java.awt.MouseInfo的其他问题的帖子。

可能在 MacOS 上其中一个会出现问题,所以你需要更换它们,要小心。我的意思是,如果你希望你的解决方案具有可移植性,请检查机器人在所有配置上是否正常工作。 - Alexander Kirov
谢谢提供信息!幸运的是我在工作地方有一台Mac电脑。我会去查看一下。 - Lakatos Gyula
建议不要使用JDK内部类(com.sun.*),这种做法并不是最佳实践,本回答也不是最好的方式(请参见我的回答)。 - Renato

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接