日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本文介紹了在按住按鈕JavaFX的同時對多個節點進行鼠標拖動檢測的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我將直接回答這個問題。我如何為我的應用程序實現一個系統,讓我在按住鼠標左鍵的同時為下面顯示的這些矩形上色?當它被釋放時,它就會停止著色。我通過互聯網搜索了一下,但我仍然不明白這些鼠標事件是如何工作的。

祝你有愉快的一天!

推薦答案

來自javafx.scene.input.MouseEvent的文檔:

拖動手勢

有三種類型的拖動手勢。它們都是由鼠標按下事件啟動的,并由于鼠標釋放事件而終止,源節點決定將發生哪個手勢。

默認設置為簡單的按下-拖動-釋放手勢。它最適合用于更改形狀的大小、拖動形狀等等。整個按下-拖動-釋放手勢被傳遞到一個節點。按下鼠標按鈕時,將拾取最頂端的節點,并將所有后續鼠標事件傳遞到同一節點,直到釋放該按鈕。如果鼠標單擊事件是從這些事件生成的,它仍會傳遞到同一節點。

在簡單的按下拖動釋放手勢期間,其他節點不會參與,也不會獲得任何事件。如果這些節點需要參與手勢,則必須激活完整的按下-拖動-釋放手勢。此手勢最適合用于通過”Wire”連接節點、將節點拖動到其他節點等。MouseDragEvent中對此手勢類型的描述更為詳細,它包含傳遞到手勢目標的事件。

第三種手勢類型是平臺支持的拖放手勢。它最適合于傳輸數據,也適用于應用程序之間(不一定是FX)。此手勢類型在DragEvent中有更詳細的描述。

簡而言之,當按下鼠標按鍵時,會自動激活簡單的按下拖動釋放手勢,并將所有MouseEvent發送到手勢源。當您開始拖動時,DRAG_DETECTED事件最終會到達。在其處理程序中,您可以通過在節點或場景上調用startFullDrag方法來啟動完整的按拖放手勢–MouseDragEvent開始傳遞到手勢目標,或者您可以通過在節點或場景上調用startDragAndDrop方法來開始拖放手勢-系統切換到拖放模式,DragEvent開始傳遞,而不是MouseEvent。如果您不調用這些方法中的任何一個,則簡單的按拖放手勢將繼續。

[…]

如果我正確理解了您的問題,您希望能夠將鼠標拖動到多個節點上并讓它們做出反應,所有操作都在一個手勢中完成。您將需要使用完整的
按下-拖動-釋放手勢即可完成此操作。如前所述,您必須偵聽DRAG_DETECTED事件并調用Node#startFullDrag()Scene#startFullDrag()以激活完全按下-拖動-釋放手勢。然后,您的用戶界面中的每個”正方形”都需要偵聽MOUSE_DRAG_ENTERED事件。請注意,事件類型為MOUSE_DRAG_ENTEREDMOUSE_ENTERED

舉個例子:

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

public class App extends Application {

  @Override
  public void start(Stage primaryStage) {
    GridPane root = new GridPane();
    root.setPadding(new Insets(2));
    root.setVgap(2);
    root.setHgap(2);

    // start full press-drag-release gesture
    root.setOnDragDetected(
        event -> {
          if (event.getButton() == MouseButton.PRIMARY) {
            event.consume();
            root.startFullDrag();
          }
        });

    for (int i = 0; i < 12; i++) {
      for (int j = 0; j < 12; j++) {
        Rectangle rect = new Rectangle(50, 50, Color.WHITE);
        rect.setStroke(Color.BLACK);
        root.add(rect, i, j);

        // detect MOUSE_DRAG_ENTERED events
        rect.setOnMouseDragEntered(
            event -> {
              event.consume();
              rect.setFill(Color.BLACK);
            });
      }
    }

    primaryStage.setTitle("MouseDragEvent Example");
    primaryStage.setScene(new Scene(root));
    primaryStage.show();
  }
}

上述通過在根GridPane上設置Node#onDragDetected屬性來偵聽DRAG_DETECTED事件。請注意,如果您開始在其中一個Rectangle上拖動,則事件將向上冒泡到根,并由前面提到的處理程序處理。此外,由于您明確提到了鼠標按鍵,因此我添加了鼠標按鍵是否為主按鍵的檢查。

然后,每個Rectangle通過設置其Node#onMouseDragEntered屬性來偵聽MOUSE_DRAG_ENTERED事件。僅當完全按下-拖動-釋放手勢生效時,才會傳遞這些事件。

這篇關于在按住按鈕JavaFX的同時對多個節點進行鼠標拖動檢測的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,

分享到:
標簽:多個 拖動 按住 按鈕 檢測 節點 鼠標
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定