Как отслеживать изменение положения мыши x y с помощью прослушивателя изменений?

Я надеялся добиться этого с помощью прослушивателя изменений, прикрепленного к целому числу (mouse.x). Но getPointerInfo().getLocation(); один раз инициализируется. После этого позиция не обновляется. Как я могу заставить эти прослушиватели изменений работать при изменении значения?

Возможно, есть лучший способ сделать это. Любая помощь приветствуется.

public class TheMidiApp extends Application {  

@Override
public void start(Stage stage) throws Exception {
Point mouse = java.awt.MouseInfo.getPointerInfo().getLocation();             
System.out.println("MouseX " + mouse.x);
System.out.println("MouseY " + mouse.y);

//Changelistener X
IntegerProperty changeValueMouseX = new SimpleIntegerProperty(mouse.x);
changeValueMouseX.addListener(new ChangeListener<Number>(){
    @Override
    public void changed(ObservableValue <? extends Number> observableValue, Number oldValue, Number newValue){
        System.out.println("OLD MOUSE X VALUE: " + oldValue);
        System.out.println("NEW MOUSE X VALUE: " + newValue);
    }
});

//Changelistener Y                    
IntegerProperty changeValueMouseY = new SimpleIntegerProperty(mouse.y); 
changeValueMouseX.addListener(new ChangeListener<Number>(){ 
    @Override
    public void changed(ObservableValue <? extends Number> observableValue, Number oldValue, Number newValue){
        System.out.println("OLD MOUSE Y VALUE: " + oldValue);
        System.out.println("NEW MOUSE Y VALUE: " + newValue);
    }
});

MouseX = mouse.x;
MouseY = mouse.y;

person Bram    schedule 28.11.2016    source источник
comment
Вам нужен слушатель на корневом узле. Я бы попробовал onMouseMoved на корневом узле.   -  person Sedrick    schedule 28.11.2016


Ответы (1)


Вам нужен слушатель на корневом узле.

public class JavaFXApplication29 extends Application {

    @Override
    public void start(Stage primaryStage) {


        AnchorPane root = new AnchorPane();
        Scene scene = new Scene(root, 500, 500);

        root.setOnMouseMoved(new EventHandler<MouseEvent>(){
            @Override
            public void handle(MouseEvent event) {
                System.out.println("mouse X: " + event.getX());
                System.out.println("mouse Y: " + event.getY());
            }
        });       

        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

}
person Sedrick    schedule 28.11.2016
comment
Это было бы хорошим началом, однако мне нужно знать положение вне приложения (Java), потому что мышь может находиться на другом экране. У меня есть основной экран и сенсорный экран. Приложение работает на сенсорном экране. Я использую это, чтобы телепортировать мышь обратно в исходное положение, от которого она осталась. Телепортация положения мыши работает, только она каждый раз возвращается в одно и то же положение. Вот почему я хочу отслеживать и обновлять старое положение мыши на главном экране. - person Bram; 28.11.2016
comment
stackoverflow.com/questions/2469515/ Ответ на этот вопрос может помочь. - person Sedrick; 28.11.2016