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

问题描述:

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

非常感谢!

+1

我不是专家,但据我所知,这并不容易。鼠标/光标通常是一个操作系统元素,除非你有一个窗口来捕获它,否则你不会得到它。您可能需要下降到原生级别(JNA?),否则您需要创建并显示透明的“舞台”,然后获取坐标,然后放弃该透明舞台。 – Jai

+0

@Jai感谢您的反馈。这可能确实是这样,因此得到一个干净的解决方案可能不能,但不知何故模拟一个'MouseEvent'。 – Rolch2015

那么,你可以使用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); 
    } 
+1

'com.sun.glass.ui.Robot'是内部API的一部分,据我所知它不会在Java 9中轻易访问(请纠正我,如果我错了)。我正在尝试为JavaFX获得干净的解决方案。 – Rolch2015

+0

经过一些Google搜索之后,我发现了一个链接,它表示Glass Robot API将替代com.sun.glass.ui.Robot类。所以,你不应该担心。看看下面给出的链接。 bugs.openjdk.java.net/browse/JDK-8090763 – karna

+0

谢谢你的链接。看起来好像目前没有干净的解决方案。因此,我会将您的答案标记为已接受的答案。 – Rolch2015