[英]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.