在没有事件的情况下在JavaFX中检索鼠标位置
我想在显示舞台前检索当前鼠标位置的x和y坐标。到目前为止,我发现在JavaFX中获得鼠标位置的唯一方法是在MouseEvent
之内,这不适用于我的情况。此外,我找到了通过java.awt.MouseInfo
找回位置的可能性。但是,我认为这是一个坏主意(我使用JavaFX而不是AWT),至少在我的情况下,结果是HeadlessException
。是否有其他干净的可能性来检索JavaFX中的鼠标位置而不会太冒昧(例如,模拟MouseEvent仅用于获取位置)?在没有事件的情况下在JavaFX中检索鼠标位置
非常感谢!
那么,你可以使用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(基本操作系统)上试过它,它工作。
更新: 经过一些Google搜索之后,我发现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);
}
'com.sun.glass.ui.Robot'是内部API的一部分,据我所知它不会在Java 9中轻易访问(请纠正我,如果我错了)。我正在尝试为JavaFX获得干净的解决方案。 – Rolch2015
经过一些Google搜索之后,我发现了一个链接,它表示Glass Robot API将替代com.sun.glass.ui.Robot类。所以,你不应该担心。看看下面给出的链接。 bugs.openjdk.java.net/browse/JDK-8090763 – karna
谢谢你的链接。看起来好像目前没有干净的解决方案。因此,我会将您的答案标记为已接受的答案。 – Rolch2015
我不是专家,但据我所知,这并不容易。鼠标/光标通常是一个操作系统元素,除非你有一个窗口来捕获它,否则你不会得到它。您可能需要下降到原生级别(JNA?),否则您需要创建并显示透明的“舞台”,然后获取坐标,然后放弃该透明舞台。 – Jai
@Jai感谢您的反馈。这可能确实是这样,因此得到一个干净的解决方案可能不能,但不知何故模拟一个'MouseEvent'。 – Rolch2015