Как я должен использовать другой поток, чтобы получить позицию курсора и обновить 2 метки с координатами? - PullRequest
0 голосов
/ 28 марта 2019

Итак, у меня есть это в initiallize:

    double x = 1, y = 1;
    while (x != 0 || y != 0) {
        x = MouseInfo.getPointerInfo().getLocation().getX();
        y = MouseInfo.getPointerInfo().getLocation().getY();
        cursorXPositionLabel.setText("" + x);
        cursorYPositionLabel.setText("" + y);
        System.out.println("X = " + x + "\tY = " + y);
    }

Но приложение не запускается, пока курсор не находится в (0,0) координате. Когда это так, приложение запускается, и метки показывают 0, 0. Я хочу, чтобы приложение запускалось, и, перемещая курсор, обновляйте метки фактическими координатами.

1 Ответ

0 голосов
/ 28 марта 2019

Извините, я не понял, что вы хотели, чтобы оно вышло за пределы приложения. Проверьте этот пример, оно протестировано и работает

public class Main extends Application {

    private Label xLabel;
    private Label yLabel;

    @Override
    public void start(Stage primaryStage) {
        xLabel = new Label("X Coordinate: 0");
        yLabel = new Label("y Coordinate: 0");

        VBox vBox = new VBox();
        vBox.setAlignment(Pos.CENTER);
        vBox.getChildren().addAll(xLabel, yLabel);

        Scene scene = new Scene(vBox);
        primaryStage.setScene(scene);
        primaryStage.setWidth(300);
        primaryStage.setHeight(300);
        primaryStage.show();

        updateCoordintates();
    }

    private void updateCoordintates(){
        new Thread(()->{ //Splits off the Main thread
            double lastX = 1;
            double lastY = 1;
            while (true) { //Will run forever you may want to change this not sure of your constraints
                double x = MouseInfo.getPointerInfo().getLocation().getX();
                double y = MouseInfo.getPointerInfo().getLocation().getY();

                //The platform.runlater will allow you to post the change to the screen when available
                if(x!=lastX)
                    Platform.runLater(()->xLabel.setText(String.valueOf(x)));
                if(y!=lastY)
                    Platform.runLater(()->yLabel.setText(String.valueOf(y)));

                lastX = x;
                lastY = y;
                System.out.println("X = " + x + "\tY = " + y);
            }
        }).start();
    }
    public static void main(String[] args) { launch(args); }
}

Вы не нужно его на фоновом потоке для Праведника Сего на огнестойкости ̶ .̶s̶e̶t̶O̶n̶M̶o̶u̶s̶e̶M̶o̶v̶e̶d̶ С каким контейнером, ИСПОЛЬЗУЕТ Вот исполняемый ПРИМЕР, обновляющие координаты на Движении

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...