2017-07-19 59 views
2

我想在顯示舞臺前檢索當前鼠標位置的x和y座標。到目前爲止,我發現在JavaFX中獲得鼠標位置的唯一方法是在MouseEvent之內,這不適用於我的情況。此外,我找到了通過java.awt.MouseInfo找回位置的可能性。但是,我認爲這是一個壞主意(我使用JavaFX而不是AWT),至少在我的情況下,結果是HeadlessException。是否有其他乾淨的可能性來檢索JavaFX中的鼠標位置而不會太冒昧(例如,模擬MouseEvent僅用於獲取位置)?在沒有事件的情況下在JavaFX中檢索鼠標位置

非常感謝!

+1

我不是專家,但據我所知,這並不容易。鼠標/光標通常是一個操作系統元素,除非你有一個窗口來捕獲它,否則你不會得到它。您可能需要下降到原生級別(JNA?),否則您需要創建並顯示透明的「舞臺」,然後獲取座標,然後放棄該透明舞臺。 – Jai

+0

@Jai感謝您的反饋。這可能確實是這樣,因此得到一個乾淨的解決方案可能不能,但不知何故模擬一個'MouseEvent'。 – Rolch2015

回答

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(基本操作系統)上試過它,它工作。

更新: 經過一些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

相關問題