目次 | 前の項目 | 次の項目 ドラッグ&ドロップ


2.2 ドラッグジェスチャーの認識

ドラッグ&ドロップ操作を開始できるジェスチャーは、プラットフォーム、Component、およびデバイスごとに異なります。 このため、操作の依存性をカプセル化するための機構が必要です。この機構があれば、ドラッグ&ドロップ操作を開始する Component の作成が簡単になります。


2.2.1 DragGestureRecognizer

DragGestureRecognizer は、すべてのデバイス、プラットフォーム、および Component 固有のドラッグ&ドロップジェスチャーレコグナイザ用の抽象基底クラスで、次のように定義されています。

public abstract DragGestureRecognizer {
    protected DragGestureRecognizer(
				DragSource          ds,
				Component           c,
				int                 srcActions,
				DragGestureListener dgl
    );

    public Component getComponent();
    public void      setComponent(Component c);

    public int  getSourceActions();
    public void setSourceActions(int actions);
    
    public java.awt.InputEvent getTriggerEvent();

    public void resetRecognizer();

    public void addDragGestureListener(
                    DragGestureListener dgl
    ) throws TooManyListenerExceptions;

    public void removeDragGestureListener(
                    DragGestureListener dgl
    );

    protected abstract void registerListeners();
    protected abstract void unregisterListeners();

    protected void fireDragGestureRecognized(
                       int dragAction
    );

    protected void appendEvent(InputEvent awtie);
}


特定の DragGestureRecognizer に適した具象サブクラスは、DragSource インスタンス、Toolkit など、さまざまな方法で取得できます。 具象実装サブクラスは、Class 参照を抽象 DragGestureRecognizer スーパークラスに指定することによって、標準 API から取得できます。この実パラメータの具象サブクラスは、インスタンス化されて要求元に返されます。

DragGestureRecognizer インスタンスが Component および DragSource に関連付けられると、そのインスタンスの特定の EventListener セットがターゲット Component に登録されて、その Component に提供されたイベントのいくつかが監視され、開始ジェスチャーが検出されます。 registerListeners() および unregisterListeners() を使用して、これらの監視 EventListener の追加および削除を行うことができます。

指定された Component または DragSource が、その DragGestureRecognizer に対して正しい状態にないか、その DragGestureRecognizer と相互運用性がない場合は、DragGestureRecognizer によって、IllegalStateException または IllegalArgumentException がスローされる可能性があります。

DragGestureRecognizer の具象インスタンスによって、関連する Component 上でドラッグを開始するユーザジェスチャーが検出されたときは、DragGestureListener イベントのユニキャストイベントソース上に登録されている DragGestureListener に対して DragGestureEvent が発生します。 この DragGestureListener によって、関連する DragSource に対してドラッグ&ドロップ操作の開始が指示されます (適切な場合)。

DragGestureRecognizer 実装から、マウスデバイスジェスチャーの MouseDragGestureRecognizer を認識する抽象サブクラスが 1 つ以上提供されます。 その他の入力デバイスまたは特定の Component クラスのセマンティクスをサポートするために、その他の抽象サブクラスがプラットフォームから提供されることもあります。 この MouseDragGestureRecognizer の具象スーパークラスでは、プラットフォームに依存するマウスベースのジェスチャーがカプセル化されます。この具象スーパークラスは、createDragGestureRecognizer (Class adgrc、DragSource ds、Component c、int sa、DragGestureListener dgl) メソッドを介して Toolkit オブジェクトから取得できます。 この Toolkit の API から、プラットフォームに依存する具象実装が提供されます。この実装は、プラットフォームに依存しない特定の抽象定義 (クラス) が継承されています。

MouseDragGestureRecognizer 抽象クラスは、次のように定義されています。

public abstract   MouseDragGestureRecognizer
       extends    DragGestureRecognizer
	  implements MouseListener, MouseMotionListener {

    public MouseDragGestureRecognizer(
			DragSource          ds,
			Component           c,
			int                 sa,
			DragGestureListener dsl
    );
   
    // ...                      
}

DragGestureListener は、次のように定義されています。

public interface DragGestureListener extends EventListener {
    void dragGestureRecognized(DragGestureEvent dge);
}

通常、dragGestureRecognized() メソッドによって、DragGestureEvent の簡易 API startDrag() を介して、関連する DragSource 上でドラッグ&ドロップ操作が開始されます。

開始ジェスチャーに影響する各 Component (クラスまたはインスタンス) の動作は、通常、この DragGestureListener メソッドに実装されるか、適切な場合または可能な場合は DragGestureRecognizer サブクラスに実装されます。

DragGestureEvent は、次のように定義されています。

publc class DragGestureEvent extends EventObject {
	public DragGestureEvent(DragGestureRecognizer dgr,
                             int                   dragAction,
                             java.util.List        events
     );

    public DragGestureRecognizer
               getSourceAsDragGestureRecognizer();

    public Component getComponent();
    public DragSource getDragSource();

    public java.util.Iterator iterator();

    public Object[] toArray();
    public Object[] toArray(Object[] array);

    public int getDragAction();

    public startDrag(Cursor             dragCursor,
                     Transferable       t,
                     DragSourceListener    dsl
    );
   
    public startDrag(Cursor             dragCursor,
                     Image                 dragImage,
                     Point              imageOffset,
                     Transferable       t,
                     DragSourceListener    dsl
    );
}


DragGestureEvent によって、直前に認識されたジェスチャーの特性に関する情報がすべてカプセル化されます。たとえば、次の情報がカプセル化されます。



目次 | 前の項目 | 次の項目
Copyright © 1997, 1998 Sun Microsystems, Inc. All Rights Reserved.