あなたがそれをしている方法は直感的で機能しますが、アプリケーションのさまざまな部分が強く結合されているため、アプリケーションが大きくなると地獄を引き起こし始めます。この問題の解決策は、MVCデザインパターンとオブザーバーデザインパターンです。
理想的には、MVCパターンを使用して、ウィジェットが他のウィジェットを「認識」しないようにする必要があります。すべてのウィジェットを知っているクラス、つまりコントローラーだけがあります。あるウィジェットが別のウィジェットにメッセージを送信/通知する必要があるときはいつでも、コントローラークラスにメッセージを通知します。コントローラークラスは、適切な方法でメッセージを適切なウィジェットに中継します。このようにして、2つのウィジェットは分解され、一方は他方を壊すことなく変更できます。列挙型を使用して、コントローラーが応答する必要のあるすべての可能なアクションを列挙することができます。
イベントが発生したときにウィジェットがコントローラーのみを呼び出す必要がある場合は、適切な名前の(静的)メソッドを呼び出すだけで、ウィジェットを使用できます。ただし、他の複数のクラスにイベントを通知する必要がある場合は、クラスを変更せずに他の複数のクラスにシグナルを送信できるObserverパターンを使用することをお勧めします。eventHandlerでnotifyPObservers()を呼び出すだけで、それだけです。リスナーの数とそのタイプは関係ありません。このようにして、クラスをそのリスナーから切り離すこともできます。コントローラのみがリッスンしている場合でも、クラス内の他のコードから「コールバック」コードを明確に分離しているため、パターンを使用することをお勧めします。
ところで、これはGWTや特にJavaとは何の関係もありません。