-4

同じイベントのリスナーとして2つ以上のオブジェクトが追加された場合、イベントを処理するために最初に呼び出されるリスナーはどれですか。最初に追加されるリスナー、または最後に追加されるリスナー。イベントとは、AWTイベントを意味します。

4

2 に答える 2

3

Swing では、これらはEventListenerList挿入順序を保持するオブジェクトを使用して実装されることがよくあります (これらは配列によってサポートされます)。ただし、リスナーがその順序で呼び出されるという意味ではありません。例として、これは での実装ですAbstractButton:

protected void fireStateChanged() {
    // Process the listeners last to first, notifying
    // those that are interested in this event
    for (int i = listeners.length-2; i>=0; i-=2) {
       //etc.
    }
}

その場合、実際には逆の順序で処理されます。そのコードは、同様の例を示すEventListenerListのドキュメントに準拠しています。

逆方向にトラバースされる理由については、この別の投稿で説明しています。

これは明らかに実装固有のものであり、依存するべきではありません。

于 2013-01-04T18:53:09.023 に答える
0

これがあなたが探しているものだと思います。つまり、発射順序は不定です。特定の順序を確保したい場合は、リスナーを 1 つだけ追加して、目的の順序で他のリスナーにイベントを渡してみてください。

于 2013-01-04T18:43:45.677 に答える