猿问

我应该如何使用另一个线程来获取光标位置并使用坐标更新2个标签?

所以我在初始化中有这个:


    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。我希望应用程序启动,并在移动光标的同时,使用实际坐标更新标签。


慕田峪9158850
浏览 85回答 1
1回答

慕的地8271018

对不起,我不明白你希望它扩展到应用程序之外,检查出这个例子,它经过测试和工作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); }}Y̶o̶u̶ ̶d̶o̶ ̶n̶o̶t̶ ̶n̶e̶e̶d̶ ̶t̶o̶ ̶i̶t̶ ̶o̶n̶ ̶a̶ ̶b̶a̶c̶k̶g̶r̶o̶u̶n̶d̶ ̶t̶h̶r̶e̶a̶d̶ ̶t̶o̶ ̶t̶h̶i̶s̶ ̶j̶u̶s̶t̶ ̶f̶i̶r̶e̶ ̶a̶ ̶ ̶f̶r̶o̶m̶ ̶w̶h̶a̶t̶e̶v̶e̶r̶ ̶c̶o̶n̶t̶a̶i̶n̶e̶r̶ ̶y̶o̶u̶ ̶a̶r̶e̶ ̶u̶s̶i̶n̶g̶ ̶h̶e̶r̶e̶ ̶i̶s̶ ̶a̶ ̶r̶u̶n̶n̶a̶b̶l̶e̶ ̶e̶x̶a̶m̶p̶l̶e̶ ̶t̶h̶a̶t̶ ̶u̶p̶d̶a̶t̶e̶s̶ ̶t̶h̶e̶ ̶c̶o̶o̶r̶d̶i̶n̶a̶t̶e̶s̶ ̶o̶n̶ ̶m̶o̶v̶e̶m̶e̶n̶t̶.̶s̶e̶t̶O̶n̶M̶o̶u̶s̶e̶M̶o̶v̶e̶d̶
随时随地看视频慕课网APP

相关分类

Java
我要回答