Tengo un componente de giro 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.oyentes de ratón oscilante interceptados por componentes secundarios
Actualmente tengo oyentes ratón sobre todos los componentes hijos que miran 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 siento que debe haber una mejor manera de manejar esto por el manejo única eventos mouseEntered y mouseExited en el contenedor principal, pero dado que 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).
Por qué no asignar la misma escucha a todos los componentes necesarios. De esa forma, todos disparan exactamente la misma acción. – Morfic
¿podría ampliar su código para mostrar el probelma? como no entiendo muy bien el probelma y su solución 'deseada' –
@Grove, si asigno el mismo oyente a cada componente, existe una carrera potencial según si mouseEntered en un componente ocurre antes o después de mouseExited en otro. Digamos que estoy sobre componente1 y muevo el mouse hacia afuera al componente2. Si el mouseEntered Component2 se procesa antes que mouseExited Component1, el texto será incorrecto. No estoy seguro de si hay un orden garantizado para estos eventos ya que el mismo movimiento del mouse generaría la salida del componente1 y la entrada del componente2. –