コンポーネントに複数のDropTargetListenerを指定するにはどうすればよいですか?
-
05-07-2019 - |
質問
Javaの Component
には DropTarget
を1つしか設定できないことを(難しい方法で)知りました。汗をかくことはありませんが、その DropTarget
に別の DropTargetListener
を追加するだけです。 code> DropTargetListener !
非常に異なるイベントをリッスンする2つの DropTargetListener
があります(1つはコンポーネント内でドラッグアンドドロップされるものを処理し、もう1つはコンポーネント外から処理します)。それらを1つの巨大な DropTargetListener
に結合する必要がありますか、またはそれらを分離するエレガントな方法がありますか?
解決
DropTarget
はユニキャストソースなので、最大で1つの DropTargetListener
を追加できます。ドロップされるもののソース(内部/外部)を調べ、結果に応じて DropTargetListener
の1つを呼び出す単純なオブジェクトである必要があると思います。
編集:「ユニバーサル」を作成することに集中している場合解決策として、元のイベントにメソッド呼び出しを渡すラッパーイベントを作成してみてください。ただし、 rejectDrop()
、 acceptDrop()
(および場合によっては他のメソッドをインターセプトします)トラブル)、ラッパーが受け入れられるまで、ラッパーをリスナーに渡します。これは、リスナーが「良い」と認識することを前提としています。イベントに応じて行動します。
他のヒント
満足のいく解決策が見つからない場合は、複合パターンを使用して、子 DropTargetListener
のリストを持つ DropTargetListener
を作成します。メソッドの1つが呼び出されるたびに、リスナーのリストを反復処理し、同じメソッドを呼び出します。これにより、単一の DropTargetListener
を Component
に渡すことができますが、複数の DropTargetListener
が呼び出されます。