Je dirais, repenser le design de ton code.
Je ne sais pas si ce sont tes vraies classes (si c'est le cas, je trouve ça attroce comme découpage; voir plus bas) mais en gros ce que tu fais ressemble à définir une interface pour chaque méthode, genre:
interface HasMethodA { } interface HasMethodB { } … Ce qui est complètement contre productif.
Du coup tu essayes d'utiliser une interface comme contrat implicite (alors que c'est en réalité un contrat explicite) afin de colmater ce raisonnement. (En fait tu essayes d'utiliser les interface de manière contradictoire. ^^)
Dans ton cas, on pourr
ait éventuellement s'accorder sur le fait que les clics et les survols soient catégorisables…
Mais après, il me semble logique que, par exemple, l'évènement « MouseDown » soit lié à l'évènement « MouseUp », de même que l'évènement « MouseHover » sera intrinsèquement lié à l'élément « MouseLeave » (et éventuellement l'évènement « MouseEnter », mais celui-ci est générable entièrement à partir des deux précédents). Donc tu n'aurais déjà que deux interfaces. « HandlesClick » et « HandlesHovering ». Et plus sérieusement tu devrais même n'avoir qu'une seule interface « HandlesMouse »… Car si ta classe ne fait pas usage des évènements de la souris, ce n'est pas important. Ce qui est important, c'est juste qu'elle soit capable de les recevoir. Tu auras plus de méthodes vides dans tes classes, mais ça sera beaucoup plus propre au niveau abstrait.
Bref, supposons, que tu gardes une partie de ce design bridé, comme ça j'aborderai le second point, à savoir comment résoudre ce type de problème quand le design à côté n'est pas à revoir. (Quand tu mixes des interfaces qui n'ont rien en commum par exemple)
Dans ton cas, un tooltip requiert un ensemble de fonctionnalité minimal qui est le survol (hovering). Donc les deux évènements Hover et Leave / Out (peu importe comment tu veux les nommer, du moment que c'est suffisemment clair). En revanche (car je suis quand même où tu veux en venir

) il est évident, qu'avoir un clic pour désactiver le tooltip peut s'avérer utile. (D'où l'intérêt de gérer la souris comme une seule fonctionnalité => interface et pas comme 50 bouts de fonctionnalité)
Donc, tu demandes à l'utilisateur de la fonction de lui fournir un « HandlesHovering », donc tu pourras implémenter ton survol de manière fonctionnelle. Mais celà ne t'mpêche pas d'implémenter la fonctionnalité supplémentaire du tooltip qui depop au moment du clic si jamais la classe implémente
aussi « HandlesClick » grâce au magnifique « instanceof ».
Enfin, je sais pas si j'ai été assez clair… J'espère.
