簡體   English   中英

處理鼠標移動並在javafx中一起單擊

[英]handle mouse move and click together in javafx

我正在嘗試構建一個javafx應用程序,其中我需要響應鼠標移動和點擊一起,就像你在拍攝時反擊時發生的那樣。 但問題是,當我按下鼠標按鈕時,它將不再響應鼠標移動,直到我釋放鼠標按鈕。 我希望他們兩個並行工作。 我試圖在不同的線程中設置我的監聽器,但它不起作用。這是一個槍指針的圖像。

Image image = new Image("/pointer.png");  // a 25*25 PNG icon
ImageView imageView = new ImageView(image);
scene.setCursor(Cursor.NONE);

然后 :

scene.setOnMouseMoved(e -> {
        imageView.setX(e.getX());
        imageView.setY(e.getY());
    });

scene.setOnMousePressed(e -> Toolkit.getDefaultToolkit().beep());

我也嘗試將它們放在單獨的線程中,它也不起作用,但如果它確實存在另一個問題,我無法在另一個線程中更改javafx組件的坐標,並且我得到此錯誤 - 即使它不會導致一個錯誤,它將無法正常工作:

java.lang.IllegalStateException: Not on FX application thread

scene.setOnMouseMoved(e -> {
        Thread thread = new Thread() {
            @Override
            public void run() {
                imageView.setX(e.getX());  // here i cannot do stuff related
                imageView.setY(e.getY());  // to javafx components
            }
        };

        thread.start();
    });

    scene.setOnMousePressed(e -> {
        Thread thread = new Thread() {
            @Override
            public void run() {
                Toolkit.getDefaultToolkit().beep());
            }
        };

        thread.start();
    });

我也試過這個,但它也不起作用

scene.setOnMouseMoved(e -> {
        imageView.setX(e.getX());
        imageView.setY(e.getY());

        scene.setOnMousePressed(event -> Toolkit.getDefaultToolkit().beep());
    });

那么我如何處理這個問題,如何在沒有沖突的情況下與鼠標移動並行地響應鼠標點擊。

單擊並按住鼠標時,而不是onMouseMoved使用具有相同方法簽名的onMouseDragged 我認為應該滿足您的要求。

至於異常,僅為了您的信息,為了在JavaFX Application Thread上運行代碼,只需調用Platform.runLater(some Runnable code); 所以在你的情況下

Thread thread = new Thread() {
        @Override
        public void run() {
            Platform.runLater(() -> {
                imageView.setX(e.getX()); // this will now run fine
                imageView.setY(e.getY());
            });
        }
    };

然而,絕對不需要額外的線程,因為事件的捕獲將僅傳播到JavaFX應用程序線程。 有各種過濾或處理這些事件的方法。 有關活動的更多信息,請點擊此處

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM