J'ai un composant pivotant qui comporte plusieurs sous-composants. Ce que je veux faire changer une étiquette si la souris est sur l'un de ces composants, puis le changer à quelque chose d'autre si la souris se déplace tous les composants. J'essaie de trouver un moyen plus efficace de le faire.Les écouteurs de la souris pivotante étant interceptés par des composants enfants
Actuellement, j'ai les auditeurs de la souris sur tous les composants de l'enfant qui ressemble à quelque chose comme:
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;
}
}
}
}
Cela fonctionne, mais je me sens comme il devrait y avoir une meilleure façon de gérer cela en manipulant uniquement les événements mouseEntered et mouseExited sur le conteneur parent, mais comme les composants enfants interceptent ces événements, je ne suis pas sûr de savoir comment procéder (je n'ai pas forcément le contrôle sur les composants enfants donc je ne peux pas transférer les événements mouse à l'événement parent si je voulais).
Pourquoi ne pas attribuer le même auditeur à tous les composants nécessaires. De cette façon, ils déclenchent tous exactement la même action. – Morfic
pourriez-vous peut-être développer votre code pour montrer le probelm? Comme je ne comprends pas tout à fait le problème et votre solution 'souhaitée' –
@Grove, si j'affecte le même écouteur à chaque composant, il y a une course potentielle selon que mouseEntered sur un composant se produit avant ou après mouseExited sur un autre. Disons que je suis sur component1 et que je déplace la souris vers component2. Si le mouseEntered Component2 est traité avant mouseExited Component1, le texte sera erroné. Je ne suis pas sûr s'il y a un ordre garanti à ces événements puisque le même mouvement de souris produirait le composant sortant1 et entrerait le composant 2. –