目次 | 前の項目 | 次の項目 | ドラッグ&ドロップ |
特定の背後プラットフォームのドラッグ&ドロップ、およびウィンドウシステムの実装には制限があるため、ドラッグ操作の対話、および AWT コンポーネントへのイベント送信のセマンティクスは、プラットフォームに依存しています。このため、ドラッグ操作中に DragSource がそのドラッグに属するプラットフォームのウィンドウシステムイベントの処理を行い、通常のイベント処理が排除されることがあります。プラットフォームネイティブなドラッグ&ドロップシステムのシングルスレッドの処理部と、AWT 内の実装を担当するネイティブなウィンドウシステムイベントの対話により、DropTargetListener、および DragSourceListener への「コールバック」は、AWT システムイベントを処理するスレッド上か、またはスレッドと同期して発生します。これは、セキュリティの面で望ましくない動作ですが、構造ではなく実装上の特徴なので、避けることができません。
JVM 内のドラッグ&ドロップ転送を可能にするため、既存の DataFlavor クラスは、直列化された固定表現ではなく、「ライブ」オブジェクト参照の型を表現できるように拡張されます。このようなオブジェクトは、同じ JVM、および ClassLoader コンテキスト内にある転送元と転送先の間で転送されます。
Transferable オブジェクト、それに関連付けられた DataFlavor、およびドラッグ&ドロップ操作のオペランドに指定された背後のデータをカプセル化するオブジェクトは、操作を制御する DragSource に関連付けられた DragSourceListener が dragDropEnd() イベントを受け取るまで有効です。
正常に終了したドラッグ&ドロップ (ACTION_MOVE) 操作の「転送元」は、転送が正常に完了したあと、すぐに Transferable の対象であるオブジェクトへの参照を削除または放棄する必要があります。
以前のバージョンの仕様に対する開発者からのフィードバックの結果、動作タグ ACTION_REFERENCE が追加されました。このタグにより、既存のプラットフォームのドラッグ&ドロップ「リンク」セマンティクスを含めることができます。参照、つまりリンクのセマンティクスは、プラットフォームネイティブのドラッグ&ドロップにとって非常に不都合なものであるため、ネイティブのアプリケーション間でさえも本質的に使い物にならなくなっているといわれています。このため、ネイティブとプラットフォームに依存しない Java アプリケーションとの間では、このセマンティクスの使用は推奨されません。
Java 対 Java で使用する場合、求められるセマンティクス (同一の JVM および ClassLoader 内) は、転送先が転送対象への Java オブジェクト参照を取得するように定義されています。Java JVM または ClassLoader 間では、このセマンティクスは定義された実装ですが、転送元から転送先に URL を転送することで実装することもできます。