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() { @Override public void handle(MouseEvent event) { Dragboard db = startDragAndDrop(TransferMode.ANY); ClipboardContent content = new ClipboardContent(); content.putString("Hello!"); db.setContent(content); event.consume(); } });
ドラッグ・アンド・ドロップ・ジェスチャが開始された後、マウスがドラッグされるオブジェクト(Node、Scene)がドロップ・ターゲット候補となります。
マウスがドロップ・ターゲット候補の境界にドラッグされると、ターゲット候補が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() { @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 () { @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]キーを押してドラッグ・アンド・ドロップ・ジェスチャを取り消したり、ジェスチャ・ターゲットがデータ転送の失敗を報告したことが原因で発生する場合があります。
| 修飾子と型 | フィールドと説明 |
|---|---|
static EventType<DragEvent> |
ANY
すべてのドラッグ・イベント・タイプに共通のスーパータイプ。
|
static EventType<DragEvent> |
DRAG_DONE
このイベントは、データがドロップ・ターゲットにドロップされた後に、ドラッグ・アンド・ドロップ・ジェスチャのソースで発生します。
|
static EventType<DragEvent> |
DRAG_DROPPED
このイベントは、ドラッグ・アンド・ドロップ・ジェスチャの実行時にドロップ・ターゲットでマウス・ボタンが放されたときに発生します。
|
static EventType<DragEvent> |
DRAG_ENTERED
このイベントは、ドラッグ・ジェスチャがノードに入ったときに発生します。
|
static EventType<DragEvent> |
DRAG_ENTERED_TARGET
このイベントは、ドラッグ・ジェスチャがノードに入ったときに発生します。
|
static EventType<DragEvent> |
DRAG_EXITED
このイベントは、ドラッグ・ジェスチャがノードから出たときに発生します。
|
static EventType<DragEvent> |
DRAG_EXITED_TARGET
このイベントは、ドラッグ・ジェスチャがノードから出たときに発生します。
|
static EventType<DragEvent> |
DRAG_OVER
このイベントは、ドラッグ・ジェスチャが該当ノード内で進行中のときに発生します。
|
consumed, eventType, NULL_SOURCE_TARGET, targetsource| コンストラクタと説明 |
|---|
DragEvent(EventType<DragEvent> eventType, Dragboard dragboard, double x, double y, double screenX, double screenY, TransferMode transferMode, Object gestureSource, Object gestureTarget, PickResult pickResult)
空のソースおよびターゲットを使用した新しいDragEventイベントを構築します。
|
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イベントを構築します。
|
| 修飾子と型 | メソッドと説明 |
|---|---|
void |
acceptTransferModes(TransferMode... transferModes)
この
DragEventを受け入れて、ドロップ操作の転送モードを選択します。 |
DragEvent |
copyFor(Object newSource, EventTarget newTarget)
指定したイベント・ソースとターゲットを持つこのイベントのコピーを作成して返します。
|
DragEvent |
copyFor(Object source, EventTarget target, EventType<DragEvent> type)
特定のドラッグ・イベントのコピーを作成し、特定のフィールドを置き換えます。
|
DragEvent |
copyFor(Object source, EventTarget target, Object gestureSource, Object gestureTarget, EventType<DragEvent> eventType)
特定のドラッグ・イベントのコピーを作成し、特定のフィールドを置き換えます。
|
TransferMode |
getAcceptedTransferMode()
ターゲット候補に受け入れられる転送モードを取得します。
|
Object |
getAcceptingObject()
ドラッグを受け入れたオブジェクト。
|
Dragboard |
getDragboard()
データの転送に使用できるドラッグボード。
|
EventType<DragEvent> |
getEventType()
このイベントのイベント・タイプを取得します。
|
Object |
getGestureSource()
ドラッグ・アンド・ドロップ・ジェスチャのソース・オブジェクト。
|
Object |
getGestureTarget()
ドラッグ・アンド・ドロップ・ジェスチャのターゲット・オブジェクト。
|
PickResult |
getPickResult()
選択内容に関する情報を返します。
|
double |
getSceneX()
DragEventのソースが含まれている
Sceneの原点に対して相対的なイベントの水平位置を返します。 |
double |
getSceneY()
DragEventのソースが含まれている
Sceneの原点に対して相対的なイベントの垂直位置を返します。 |
double |
getScreenX()
イベントの水平方向の絶対位置を返します。
|
double |
getScreenY()
イベントの垂直方向の絶対位置を返します。
|
TransferMode |
getTransferMode()
データ転送モード。
|
double |
getX()
DragEventのソースの原点に対して相対的なイベントの水平位置。
|
double |
getY()
DragEventのソースの原点に対して相対的なイベントの垂直位置。
|
double |
getZ()
MouseEventのソースの原点に対して相対的なイベントの深度位置。
|
boolean |
isAccepted()
このイベントが受け入れられたかどうかを示します。
|
boolean |
isDropCompleted()
setDropCompleted(true)がこのイベントに対して呼び出されたかどうか。 |
void |
setDropCompleted(boolean isTransferDone)
DRAG_DROPPEDイベント・ハンドラでこのDragEventの転送処理が正常に完了したことを示します。 |
getSource, toStringpublic static final EventType<DragEvent> DRAG_ENTERED_TARGET
DRAG_ENTEREDイベント・ハンドラを使用する必要があります。 public static final EventType<DragEvent> DRAG_ENTERED
DRAG_ENTERED_TARGETを使用する必要があります。 public static final EventType<DragEvent> DRAG_EXITED_TARGET
DRAG_EXITEDイベント・ハンドラを使用する必要があります。 public static final EventType<DragEvent> DRAG_EXITED
DRAG_EXITED_TARGETを使用する必要があります。 public static final EventType<DragEvent> DRAG_OVER
public static final EventType<DragEvent> DRAG_DONE
transferModeは、ドロップ・ターゲットで何が起きたかを示します。 transferModeの値がMOVEである場合には、ソースがそのデータをクリアできます。 ソースのデータをクリアすると、ドラッグ・アンド・ドロップ・ジェスチャによってデータが移動された適切な外観がユーザーに表示されます。 値がNONEのtransferModeは、ドラッグ・アンド・ドロップ・ジェスチャでデータが転送されなかったことを示しています。 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)
transferModeに従ってaccepted状態およびacceptedTransferModeが設定されます。 source - イベントのソース。 nullに設定できます。 target - イベントのターゲット。 nullに設定できます。 eventType - イベントのタイプ。dragboard - イベントのドラッグボード。x - シーンに関連するx。y - シーンに関連するy。screenX - 画面に対して相対的なx座標。screenY - 画面に対して相対的なy座標。transferMode - イベントの転送モード。gestureSource - イベントのドラッグ・アンド・ドロップ・ジェスチャのソース。gestureTarget - イベントのドラッグ・アンド・ドロップ・ジェスチャのターゲット。pickResult - 選択結果。 nullに設定でき、その場合は、シーン座標とターゲットに基づいて、追加の値のない2D選択結果が構築されます。 public DragEvent(EventType<DragEvent> eventType, Dragboard dragboard, double x, double y, double screenX, double screenY, TransferMode transferMode, Object gestureSource, Object gestureTarget, PickResult pickResult)
eventType - イベントのタイプ。dragboard - イベントのドラッグボード。x - シーンに関連するx。y - シーンに関連するy。screenX - 画面に対して相対的なx座標。screenY - 画面に対して相対的なy座標。transferMode - イベントの転送モード。gestureSource - イベントのドラッグ・アンド・ドロップ・ジェスチャのソース。gestureTarget - イベントのドラッグ・アンド・ドロップ・ジェスチャのターゲット。pickResult - 選択結果。 nullに設定でき、その場合は、シーン座標に基づいて、追加の値のない2D選択結果が構築されます。 public DragEvent copyFor(Object source, EventTarget target, Object gestureSource, Object gestureTarget, EventType<DragEvent> eventType)
source - コピーされたイベントの新しいソースtarget - コピーされたイベントの新しいターゲットgestureSource - 新しいジェスチャ・ソース。gestureTarget - 新しいジェスチャ・ターゲット。eventType - 新しいイベント・タイプpublic DragEvent copyFor(Object newSource, EventTarget newTarget)
Eventnullに設定されている場合は、NULL_SOURCE_TARGET値によって置換されます。 public DragEvent copyFor(Object source, EventTarget target, EventType<DragEvent> type)
source - コピーされたイベントの新しいソースtarget - コピーされたイベントの新しいターゲットeventType - 新しいイベント・タイプpublic EventType<DragEvent> getEventType()
EventEventクラスの複数のオブジェクトは、異なるイベント・タイプを持つことができます。 これらのイベント・タイプでは、発生するイベントの種類をさらに指定します。 getEventType、クラスInputEventpublic final double getX()
public final double getY()
public final double getZ()
public final double getScreenX()
public final double getScreenY()
public final double getSceneX()
Sceneの原点に対して相対的なイベントの水平位置を返します。 ノードがScene内にない場合、値はDragEventのノードの最上位のルート親のboundsInParentに対して相対的な値になります。 3Dシーンでは、これは投影変換の適用後にフラットな座標を表します。 Sceneの原点に対して相対的なイベントの水平位置。public final double getSceneY()
Sceneの原点に対して相対的なイベントの垂直位置を返します。 ノードがScene内にない場合、値はDragEventのノードの最上位のルート親のboundsInParentに対して相対的な値になります。 3Dシーンでは、これは投影変換の適用後にフラットな座標を表します。 Sceneの原点に対して相対的なイベントの垂直位置。public final PickResult getPickResult()
public final Object getGestureSource()
nullは、ジェスチャが他のアプリケーションから発生した場合に有効です。 public final Object getGestureTarget()
nullは、転送が行われずにドラッグ・アンド・ドロップ・ジェスチャが取り消されたか完了した場合、またはドラッグ・イベントを受け入れるイベント・ターゲットが現時点で存在しない場合に有効です。 public final TransferMode getTransferMode()
public final boolean isAccepted()
acceptTransferModes(javafx.scene.input.TransferMode...)public final TransferMode getAcceptedTransferMode()
public final Object getAcceptingObject()
public final Dragboard getDragboard()
DRAG_DETECTEDマウス・イベントのハンドラでデータをこのドラッグボードに配置できます。 DRAG_DROPPEDイベントのハンドラでこのドラッグボードからデータをコピーできます。 public void acceptTransferModes(TransferMode... transferModes)
DragEventを受け入れて、ドロップ操作の転送モードを選択します。 このイベントを受信するドロップ・ターゲット候補がDRAG_OVERイベント・ハンドラからのドロップ・ターゲットであることを示すために使用されます。
このメソッドに渡され、かつジェスチャ・ソースでサポートされている転送モードのいずれかを受け入れます。 可能な場合にはデフォルトの転送モードを受け入れ、それ以外の場合は受入れ可能なモードのうち最も一般的なものを受け入れます。
public void setDropCompleted(boolean isTransferDone)
DRAG_DROPPEDイベント・ハンドラでこのDragEventの転送処理が正常に完了したことを示します。 この呼出し後にdragboardアクセスが発生することはありません。 isTransferDone - trueは、転送が正常に完了したことを示します。IllegalStateException - これがDRAG_DROPPEDイベントではない場合public boolean isDropCompleted()
setDropCompleted(true)がこのイベントに対して呼び出されたかどうか。setDropCompleted(true)が呼び出された場合はtrueCopyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.