モジュール javafx.graphics
パッケージ javafx.scene.input

クラスDragEvent

  • すべての実装されたインタフェース:
    Serializable, Cloneable


    public final class DragEvent
    extends InputEvent
    ドラッグ・アンド・ドロップ・ジェスチャ時にマウス・イベントを置換するドラッグ・イベント。 押下、ドラッグ、解放のジェスチャとドラッグ・アンド・ドロップ・ジェスチャとの違いについては、MouseEventで説明します。

    ドラッグ・アンド・ドロップ・ジェスチャは、DRAG_DETECTEDイベント・ハンドラ内で(ノードまたはシーンに対して) startDragAndDrop()を呼び出すことで開始できます。 ドロップ・ターゲットに転送されるデータは、現時点ではdragBoardに配置されます。

    ドラッグの入出イベントは、マウスの入出イベントと同じように動作します。MouseEventの概要を参照してください。

    ドラッグ・ソース: ドラッグ・アンド・ドロップ・ジェスチャの開始

    ドラッグ・ジェスチャが検出されたときに、アプリケーションはドラッグ・アンド・ドロップ・ジェスチャを開始するか、押下、ドラッグ、解放のジェスチャを続行するかを決定できます。

    デフォルトのドラッグ検出メカニズムでは、ボタンが押された状態のマウスの動作とヒステリシスとを組み合せて使用しています。 この動作は、アプリケーションによって強化できます。 MOUSE_PRESSEDおよびMOUSE_DRAGGEDの各イベントに、ドラッグ・ジェスチャが検出されたかどうかを決定するdragDetectフラグがあります。 このフラグのデフォルト値は、デフォルトの検出メカニズムによって異なり、イベント・ハンドラ内でsetDragDetect()を呼び出すことによって変更できます。 dragDetectフラグがtrueに設定された状態でこれらのいずれかのイベントの処理が終了すると、DRAG_DETECTED MouseEventがジェスチャ・ソース候補(マウス・ボタンが押下されたオブジェクト)に送信されます。 このイベントは、ジェスチャ検出について通知します。

    DRAG_DETECTEDイベント・ハンドラ内で、ノードまたはシーンに対してstartDragAndDrop()メソッドが呼び出され、返されたDragboardでドラッグ対象のデータが利用できるようになると、startDragAndDrop()が呼び出されたオブジェクトがジェスチャ・ソースとみなされ、ドラッグ・アンド・ドロップ・ジェスチャが開始されます。 Dragboardにはシステム・クリップボード機能がありますが、特にドラッグ・アンド・ドロップによるデータ転送用に使用されます。

    startDragAndDrop()メソッドには、ジェスチャ・ソースでサポートされている一連のTransferModeを渡します。 たとえば、TransferMode.COPYのみを渡した場合、ジェスチャ・ソースではデータのコピーのみが許可され、移動や参照は許可されません。

    次に、簡単なドラッグ・アンド・ドロップ・ソースの例を示します。

    Rectangle rect = new Rectangle(100, 100);
    rect.setOnDragDetected(new EventHandler<MouseEvent>() {
        @Override public void handle(MouseEvent event) {
            Dragboard db = startDragAndDrop(TransferMode.ANY);
            ClipboardContent content = new ClipboardContent();
            content.putString("Hello!");
            db.setContent(content);
            event.consume();
        }
    });
     

    ドロップ・ターゲット候補

    ドラッグ・アンド・ドロップ・ジェスチャが開始された後、マウスがドラッグされるオブジェクト(NodeScene)がドロップ・ターゲット候補となります。

    マウスがドロップ・ターゲット候補の境界にドラッグされると、ターゲット候補がDRAG_ENTEREDイベントを受け取ります。 マウスは、ターゲット候補の境界の外側にドラッグされると、DRAG_EXITEDイベントを受け取ります。 バブリングDRAG_ENTERED_TARGETバリアントおよびDRAG_EXITED_TARGETバリアントもあります。 これらは、マウス入出イベントと同じように動作します。MouseEventの概要を参照してください。

    ドロップ・ターゲット候補は、その外観を変えることにより、ドラッグ対象のデータをドロップできることをユーザーに知らせることができます。 これは、マウスの位置に基づいてDRAG_OVERイベント・ハンドラで行うことができます。 別のオプションとして、DRAG_ENTEREDハンドラおよびDRAG_EXITEDハンドラでターゲット候補の外観を変更する方法もあります。

    DRAG_OVERイベント・ハンドラでは、ドロップ・ターゲット候補は実際のターゲットであることを知らせることができます。 これを行うは、イベントに対してacceptTransferModes(TransferMode...)を呼び出し、受入れ可能な転送モードを渡します。 これがイベント配信時に呼び出されない場合や、渡した転送モードのいずれもジェスチャ・ソースでサポートされていない場合は、ドロップ・ターゲット候補は実際のドロップ・ターゲットとはみなされません

    acceptTransferModes(TransferMode...)を呼び出してイベントを受け入れるかどうかを判断するときは、Dragboardで使用可能なデータのタイプを考慮する必要があります。 Dragboardへのアクセスは、getDragboard()メソッドによって提供されます。

    イベントを受け入れるとき、ジェスチャ・ターゲット候補はその操作にどのTransferModeが受け入れられるかを判断します。 その判断を行うために、DragBoard.getTransferModes() (ジェスチャ・ソースでサポートされている転送モードのセット)およびDragEvent.getTransferMode() (プラットフォームによって発行され、キー修飾子によって駆動されるデフォルトの転送モード)を使用できます。 複数の転送モードをacceptTransferModes(TransferMode...)メソッドに渡すことができます。 この場合、このメソッドがアプリケーションにかわって判断を下します(デフォルトのモードがジェスチャ・ソースでサポートされ、ジェスチャ・ターゲットで受け入れられる場合はそのデフォルトのモードを選択します。それ以外の場合は、サポートされ、受け入れられるモードのうち最も一般的なモードを選択します)。 DRAG_DROPPEDイベントのgetTransferMode()は後で、DRAG_OVERイベント・ハンドラによって受け入れられる転送モードを報告します。

    ドラッグ・アンド・ドロップ・ジェスチャは、マウス・ボタンを放すと終了します。 以前のDRAG_OVERイベントを受け入れたジェスチャ・ターゲットに対してこれが発生し、転送モードがジェスチャ・ソースでサポートされている場合、DRAG_DROPPEDイベントがジェスチャ・ターゲットに送信されます。 そのハンドラで、ジェスチャ・ターゲットはドラッグボードのデータにアクセスできます。 データが転送された後(または転送しないことが決定された後)、イベントに対してsetDropCompleted(Boolean)を呼び出してジェスチャを完了する必要があります。 Boolean引数は、データが正常に転送されたかどうかを示します。 これが呼び出されない場合、ジェスチャは失敗とみなされます。

    次に、テキスト・データの簡単なドラッグ・アンド・ドロップ・ターゲットの例を示します。

    Rectangle rect = new Rectangle(100, 100);
    
    rect.setOnDragOver(new EventHandler<DragEvent>() {
        @Override public void handle(DragEvent event) {
            Dragboard db = event.getDragboard();
            if (db.hasString()) {
                event.acceptTransferModes(TransferMode.COPY_OR_MOVE);
            }
            event.consume();
        }
    });
    
    rect.setOnDragDropped(new EventHandler<DragEvent>() {
        @Override public void handle(DragEvent event) {
            Dragboard db = event.getDragboard();
            boolean success = false;
            if (db.hasString()) {
                System.out.println("Dropped: " + db.getString());
                success = true;
            }
            event.setDropCompleted(success);
            event.consume();
        }
    });
     

    ドラッグ・ソース: ドラッグ・アンド・ドロップ・ジェスチャのファイナライズ

    ジェスチャが終了した後、データ転送の成功/失敗や取消に関係なく、DRAG_DONEイベントがジェスチャ・ソースに送信されます。 イベントのgetTransferMode()メソッドは、ジェスチャ・ソースに対し、データの転送がどのように完了したかを示します。 転送モードに値MOVEがある場合には、ソースがそのデータをクリアできます。 ソースのデータをクリアすると、ドラッグ・アンド・ドロップ・ジェスチャによってデータが移動された適切な外観がユーザーに表示されます。 値がnullの場合、ドラッグ・アンド・ドロップ・ジェスチャはデータが転送されることなく終了します。 これは、ドロップ・ターゲットでないノードでマウス解放イベントが発生したり、ユーザーが[Esc]キーを押してドラッグ・アンド・ドロップ・ジェスチャを取り消したり、ジェスチャ・ターゲットがデータ転送の失敗を報告したことが原因で発生する場合があります。

    導入されたバージョン:
    JavaFX 2.0
    関連項目:
    直列化された形式
    • フィールドの詳細

      • ANY

        public static final EventType<DragEvent> ANY
        すべてのドラッグ・イベント・タイプに共通のスーパータイプ。
      • DRAG_ENTERED_TARGET

        public static final EventType<DragEvent> DRAG_ENTERED_TARGET
        このイベントは、ドラッグ・ジェスチャがノードに入ったときに発生します。 これはバブリング・バリアントで、入ったノードのすべての親にも配信されます(消費済である場合を除きます)。 ノードのいずれかの子に入ったことを通知する必要がない場合は、DRAG_ENTEREDイベント・ハンドラを使用する必要があります。
        関連項目:
        MouseEvent (類似したマウスの入出処理の詳細)
      • DRAG_ENTERED

        public static final EventType<DragEvent> DRAG_ENTERED
        このイベントは、ドラッグ・ジェスチャがノードに入ったときに発生します。 このイベント・タイプは、入ったノードにのみ配信されます。親がそのノードをフィルタ処理したり、バブリング・イベントを受け取る必要がある場合、その親はDRAG_ENTERED_TARGETを使用する必要があります。
        関連項目:
        MouseEvent (類似したマウスの入出処理の詳細)
      • DRAG_EXITED_TARGET

        public static final EventType<DragEvent> DRAG_EXITED_TARGET
        このイベントは、ドラッグ・ジェスチャがノードから出たときに発生します。 これはバブリング・バリアントで、出たノードのすべての親にも配信されます(消費済である場合を除きます)。 ノードのいずれかの子から出たことを通知する必要がない場合は、DRAG_EXITEDイベント・ハンドラを使用する必要があります。
        関連項目:
        MouseEvent (類似したマウスの入出処理の詳細)
      • DRAG_EXITED

        public static final EventType<DragEvent> DRAG_EXITED
        このイベントは、ドラッグ・ジェスチャがノードから出たときに発生します。 このイベント・タイプは、出たノードにのみ配信されます。親がそのノードをフィルタ処理したり、バブリング・イベントを受け取る必要がある場合、その親はDRAG_EXITED_TARGETを使用する必要があります。
        関連項目:
        MouseEvent (類似したマウスの入出処理の詳細)
      • DRAG_OVER

        public static final EventType<DragEvent> DRAG_OVER
        このイベントは、ドラッグ・ジェスチャが該当ノード内で進行中のときに発生します。
      • DRAG_DROPPED

        public static final EventType<DragEvent> DRAG_DROPPED
        このイベントは、ドラッグ・アンド・ドロップ・ジェスチャの実行時にドロップ・ターゲットでマウス・ボタンが放されたときに発生します。 DragEventdragboardからのデータ転送は、このイベントのハンドラで行う必要があります。
      • DRAG_DONE

        public static final EventType<DragEvent> DRAG_DONE
        このイベントは、データがドロップ・ターゲットにドロップされた後に、ドラッグ・アンド・ドロップ・ジェスチャのソースで発生します。 イベントのtransferModeは、ドロップ・ターゲットで何が起きたかを示します。 transferModeの値がMOVEである場合には、ソースがそのデータをクリアできます。 ソースのデータをクリアすると、ドラッグ・アンド・ドロップ・ジェスチャによってデータが移動された適切な外観がユーザーに表示されます。 値がNONEtransferModeは、ドラッグ・アンド・ドロップ・ジェスチャでデータが転送されなかったことを示しています。
    • コンストラクタの詳細

      • DragEvent

        public DragEvent​(Object source,
                         EventTarget target,
                         EventType<DragEvent> eventType,
                         Dragboard dragboard,
                         double x,
                         double y,
                         double screenX,
                         double screenY,
                         TransferMode transferMode,
                         Object gestureSource,
                         Object gestureTarget,
                         PickResult pickResult)
        新しいDragEventイベントを構築します。 DRAG_DROPPEDイベント・タイプおよびDRAG_DONEイベント・タイプの場合、渡したtransferModeに従ってaccepted状態およびacceptedTransferModeが設定されます。
        パラメータ:
        source - イベントのソース。 nullに設定できます。
        target - イベントのターゲット。 nullに設定できます。
        eventType - イベントのタイプ。
        dragboard - イベントのドラッグボード。
        x - シーンに関連するx。
        y - シーンに関連するy。
        screenX - 画面に対して相対的なx座標。
        screenY - 画面に対して相対的なy座標。
        transferMode - イベントの転送モード。
        gestureSource - イベントのドラッグ・アンド・ドロップ・ジェスチャのソース。
        gestureTarget - イベントのドラッグ・アンド・ドロップ・ジェスチャのターゲット。
        pickResult - 選択結果。 nullに設定でき、その場合は、シーン座標とターゲットに基づいて、追加の値のない2D選択結果が構築されます。
        導入されたバージョン:
        JavaFX 8.0
      • DragEvent

        public DragEvent​(EventType<DragEvent> eventType,
                         Dragboard dragboard,
                         double x,
                         double y,
                         double screenX,
                         double screenY,
                         TransferMode transferMode,
                         Object gestureSource,
                         Object gestureTarget,
                         PickResult pickResult)
        空のソースおよびターゲットを使用した新しいDragEventイベントを構築します。
        パラメータ:
        eventType - イベントのタイプ。
        dragboard - イベントのドラッグボード。
        x - シーンに関連するx。
        y - シーンに関連するy。
        screenX - 画面に対して相対的なx座標。
        screenY - 画面に対して相対的なy座標。
        transferMode - イベントの転送モード。
        gestureSource - イベントのドラッグ・アンド・ドロップ・ジェスチャのソース。
        gestureTarget - イベントのドラッグ・アンド・ドロップ・ジェスチャのターゲット。
        pickResult - 選択結果。 nullに設定でき、その場合は、シーン座標に基づいて、追加の値のない2D選択結果が構築されます。
        導入されたバージョン:
        JavaFX 8.0
    • メソッドの詳細

      • copyFor

        public DragEvent copyFor​(Object source,
                                 EventTarget target,
                                 Object gestureSource,
                                 Object gestureTarget,
                                 EventType<DragEvent> eventType)
        特定のドラッグ・イベントのコピーを作成し、特定のフィールドを置き換えます。
        パラメータ:
        source - コピーされたイベントの新しいソース
        target - コピーされたイベントの新しいターゲット
        gestureSource - 新しいジェスチャ・ソース。
        gestureTarget - 新しいジェスチャ・ターゲット。
        eventType - 新しいイベント・タイプ
        戻り値:
        フィールドがあるイベント・コピー
        導入されたバージョン:
        JavaFX 8.0
      • copyFor

        public DragEvent copyFor​(Object newSource,
                                 EventTarget newTarget)
        クラスからコピーされた説明: Event
        指定したイベント・ソースとターゲットを持つこのイベントのコピーを作成して返します。 ソースまたはターゲットがnullに設定されている場合は、NULL_SOURCE_TARGET値によって置換されます。
        オーバーライド:
        copyFor 、クラス: Event
        パラメータ:
        newSource - コピーされたイベントの新しいソース
        newTarget - コピーされたイベントの新しいターゲット
        戻り値:
        新しいソースとターゲットを含むイベント・コピー
      • copyFor

        public DragEvent copyFor​(Object source,
                                 EventTarget target,
                                 EventType<DragEvent> type)
        特定のドラッグ・イベントのコピーを作成し、特定のフィールドを置き換えます。
        パラメータ:
        source - コピーされたイベントのソース
        target - コピーされたイベントのターゲット
        type - イベントのタイプ
        戻り値:
        フィールドがあるイベント・コピー
        導入されたバージョン:
        JavaFX 8.0
      • getEventType

        public EventType<DragEvent> getEventType​()
        クラスからコピーされた説明: Event
        このイベントのイベント・タイプを取得します。 同じEventクラスの複数のオブジェクトは、異なるイベント・タイプを持つことができます。 これらのイベント・タイプでは、発生するイベントの種類をさらに指定します。
        オーバーライド:
        getEventType 、クラス: InputEvent
        戻り値:
        イベント・タイプ
      • getX

        public final double getX​()
        DragEventのソースの原点に対して相対的なイベントの水平位置。
        戻り値:
        DragEventのソースの原点に対して相対的なイベントの水平位置
      • getY

        public final double getY​()
        DragEventのソースの原点に対して相対的なイベントの垂直位置。
        戻り値:
        DragEventのソースの原点に対して相対的なイベントの垂直位置
      • getZ

        public final double getZ​()
        MouseEventのソースの原点に対して相対的なイベントの深度位置。
        戻り値:
        MouseEventのソースの原点に対して相対的なイベントの深度位置
        導入されたバージョン:
        JavaFX 8.0
      • getScreenX

        public final double getScreenX​()
        イベントの水平方向の絶対位置を返します。
        戻り値:
        イベントの水平方向の絶対位置
      • getScreenY

        public final double getScreenY​()
        イベントの垂直方向の絶対位置を返します。
        戻り値:
        イベントの垂直方向の絶対位置
      • getSceneX

        public final double getSceneX​()
        DragEventのソースが含まれているSceneの原点に対して相対的なイベントの水平位置を返します。 ノードがScene内にない場合、値はDragEventのノードの最上位のルート親のboundsInParentに対して相対的な値になります。 3Dシーンでは、これは投影変換の適用後にフラットな座標を表します。
        戻り値:
        DragEventのソースが含まれているSceneの原点に対して相対的なイベントの水平位置。
      • getSceneY

        public final double getSceneY​()
        DragEventのソースが含まれているSceneの原点に対して相対的なイベントの垂直位置を返します。 ノードがScene内にない場合、値はDragEventのノードの最上位のルート親のboundsInParentに対して相対的な値になります。 3Dシーンでは、これは投影変換の適用後にフラットな座標を表します。
        戻り値:
        DragEventのソースが含まれているSceneの原点に対して相対的なイベントの垂直位置。
      • getPickResult

        public final PickResult getPickResult​()
        選択内容に関する情報を返します。
        戻り値:
        選択内容に関する情報を含む新しいPickResultオブジェクト
        導入されたバージョン:
        JavaFX 8.0
      • getGestureSource

        public final Object getGestureSource​()
        ドラッグ・アンド・ドロップ・ジェスチャのソース・オブジェクト。 ジェスチャ・ソースは、ドラッグ・アンド・ドロップ操作を開始したオブジェクトです。 nullは、ジェスチャが他のアプリケーションから発生した場合に有効です。
        戻り値:
        ドラッグ&ドロップ・ジェスチャのソース・オブジェクト
      • getGestureTarget

        public final Object getGestureTarget​()
        ドラッグ・アンド・ドロップ・ジェスチャのターゲット・オブジェクト。 ジェスチャ・ターゲットは、ドラッグ・イベントを受け入れるオブジェクトです。 nullは、転送が行われずにドラッグ・アンド・ドロップ・ジェスチャが取り消されたか完了した場合、またはドラッグ・イベントを受け入れるイベント・ターゲットが現時点で存在しない場合に有効です。
        戻り値:
        ドラッグ&ドロップ・ジェスチャのターゲット・オブジェクト
      • getTransferMode

        public final TransferMode getTransferMode​()
        データ転送モード。 データ転送が実行される前は、これが入力イベント(ユーザーが修飾子を保持するなど)に従ってシステムによって設定されるデフォルトの転送モードです。 データ転送(DRAG_DROPPEDイベント)時は、これにより、以前のDRAG_OVERハンドラで受け入れられた転送モードが判別されます。 データ転送後(DRAG_DONEイベント)は、これにより、実際に行われた転送モードが判別されます。
        戻り値:
        データ転送モード
      • isAccepted

        public final boolean isAccepted​()
        このイベントが受け入れられたかどうかを示します。
        デフォルト値:
        false
        戻り値:
        このイベントは受け入れられていますか?
        関連項目:
        acceptTransferModes(javafx.scene.input.TransferMode...)
      • getAcceptedTransferMode

        public final TransferMode getAcceptedTransferMode​()
        ターゲット候補に受け入れられる転送モードを取得します。
        戻り値:
        ターゲット候補に受け入れられた転送モード
      • getAcceptingObject

        public final Object getAcceptingObject​()
        ドラッグを受け入れたオブジェクト。
        戻り値:
        ドラッグを受け入れたオブジェクト
        導入されたバージョン:
        JavaFX 8.0
      • getDragboard

        public final Dragboard getDragboard​()
        データの転送に使用できるドラッグボード。 DRAG_DETECTEDマウス・イベントのハンドラでデータをこのドラッグボードに配置できます。 DRAG_DROPPEDイベントのハンドラでこのドラッグボードからデータをコピーできます。
        戻り値:
        データを転送するためのドラッグ・ボード
      • acceptTransferModes

        public void acceptTransferModes​(TransferMode... transferModes)
        このDragEventを受け入れて、ドロップ操作の転送モードを選択します。 このイベントを受信するドロップ・ターゲット候補がDRAG_OVERイベント・ハンドラからのドロップ・ターゲットであることを示すために使用されます。

        このメソッドに渡され、かつジェスチャ・ソースでサポートされている転送モードのいずれかを受け入れます。 可能な場合にはデフォルトの転送モードを受け入れ、それ以外の場合は受入れ可能なモードのうち最も一般的なものを受け入れます。

        パラメータ:
        transferModes - ドロップ操作の転送モード。
      • setDropCompleted

        public void setDropCompleted​(boolean isTransferDone)
        DRAG_DROPPEDイベント・ハンドラでこのDragEventの転送処理が正常に完了したことを示します。 この呼出し後にdragboardアクセスが発生することはありません。
        パラメータ:
        isTransferDone - trueは、転送が正常に完了したことを示します。
        例外:
        IllegalStateException - これがDRAG_DROPPEDイベントではない場合
      • isDropCompleted

        public boolean isDropCompleted​()
        setDropCompleted(true)がこのイベントに対して呼び出されたかどうか。
        戻り値:
        setDropCompleted(true)が呼び出された場合はtrue