Comment puis-je donner à un composant plus d'un DropTargetListener?
-
05-07-2019 - |
Question
Je viens d'apprendre (à la dure) que les Composants
de Java ne peuvent contenir qu'un seul DropTarget
. Pas de panique, j'ai dit, je vais juste ajouter un autre DropTargetListener
à ce DropTarget
- seulement pour découvrir que les DropTarget
ne peuvent avoir qu'un seul < code> DropTargetListener !
J'ai deux DropTargetListener
qui écoutent des événements très différents (l'un gère les éléments glissés et déposés dans le composant, l'autre traite les éléments extérieurs au composant). Dois-je les combiner dans un DropTargetListener
géant, ou existe-t-il un moyen élégant de les séparer?
La solution
DropTarget
est une source de monodiffusion, vous pouvez donc y ajouter au plus un DropTargetListener
. Je crois que ce devrait être un objet simple qui examine la source (dedans / dehors) de la chose abandonnée et appelle l'un de vos DropTargetListener
en fonction du résultat.
Modifier: si vous êtes résolument décidé à créer un "universel" vous pouvez alors essayer de créer un événement wrapper qui transmet les appels de méthode à l’événement d’origine, mais intercepte REFDORY ()
, acceptDrop ()
(et peut-être d’autres méthodes problème), puis passez l'emballage à vos auditeurs, jusqu'à ce que l'un d'eux l'accepte. Cela suppose que les auditeurs reconnaissent "bon" événements et agir en conséquence.
Autres conseils
Si vous ne trouvez pas de solution satisfaisante, vous pouvez utiliser le Modèle composite pour créez un DropTargetListener
contenant une liste d'enfants DropTargetListener
. Chaque fois qu’une de ses méthodes est appelée, elle itérera sur sa liste d’écouteurs et invoquera la même méthode. Cela vous permettrait de remettre un seul DropTargetListener
au Composant
tout en ayant plusieurs DropTargetListener
appelés.