Se escuchan interceptadores de mouse del swing con componentes secundarios

Tengo un componente de swing que tiene varios subcomponentes. Lo que quiero hacer es cambiar una etiqueta si el mouse está sobre cualquiera de esos componentes, y luego cambiarlo a otra cosa si el mouse se mueve fuera de todos los componentes. Estoy tratando de encontrar una manera más eficiente de hacer esto.

Actualmente tengo escuchas de mouse sobre todos los componentes secundarios que se parecen a algo como:

class AMouseListener extends MouseAdapter {
    private boolean mouseOver;
    mouseEntered(MouseEvent e) { mouseOver = true; updateLabel(); }
    mouseExited(MouseEvent e) { mouseOver = false; updateLabel(); }

    void updateLabel() {
       String text = "not-over-any-components";
       // listeners are each of the listeners added to the child components
       for ( AMouseListener listener :listeners ) {
          if ( listener.mouseOver ) {
             text = "over-a-component";
             break;
          }
       }
    }
}

Esto funciona, pero creo que debería haber una mejor manera de manejar esto manejando solo los eventos mouseEntered y mouseExited en el contenedor primario, pero como los componentes secundarios interceptan estos eventos, no estoy seguro de cómo hacerlo. no necesariamente tengo control sobre los componentes secundarios, por lo que no puedo reenviar los eventos del mouse al evento principal si quisiera).

Respuestas a la pregunta(3)

Su respuesta a la pregunta