Possiedo un componente di rotazione con diversi componenti secondari. Quello che voglio fare cambia qualche etichetta se il mouse si trova su uno di questi componenti, e poi lo cambia in qualcos'altro se il mouse si sposta da tutti i componenti. Sto cercando di trovare un modo più efficiente per farlo.Ascoltatori del mouse oscillante intercettati da componenti secondari
Attualmente ho ascoltatori del mouse su tutte le componenti figlio che sembrano qualcosa di simile:
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;
}
}
}
}
Questo funziona, ma mi sento come ci dovrebbe essere un modo migliore per gestire questa situazione da solo la gestione degli eventi mouseEntered e mouseExited sul contenitore padre, ma poiché i componenti figlio intercettano questi eventi, non sono sicuro su come procedere (non ho necessariamente il controllo sui componenti figlio, quindi non posso inoltrare gli eventi del mouse all'evento padre se volessi).
Perché non assegnare lo stesso ascoltatore a tutti i componenti necessari. In questo modo, tutti attivano esattamente la stessa azione. – Morfic
potresti espandere il tuo codice per mostrare il problema? poiché non capisco perfettamente il problema e la soluzione "ricercata" –
@Grove, se assegno lo stesso listener a ciascun componente, esiste una potenziale competizione a seconda che mouseEntered su un componente si verifichi prima o dopo il mouse Esegui su un altro. Diciamo che sono sopra component1 e sposto il mouse verso component2. Se il mouseEntered Component2 viene elaborato prima di mouseExited Component1, il testo sarà errato. Non sono sicuro se ci sia un ordine garantito per questi eventi poiché lo stesso spostamento del mouse genererebbe componente uscente1 e inserendo componente2. –