2 votes

Propager les événements de la souris à plusieurs composants enfants pour un comportement de peinture synchronisée

Comme indiqué dans le titre, j'ai un JPanel avec deux ou plusieurs composants JPanel enfants et j'aimerais propager un événement de souris à tous les composants enfants. Disons par exemple que j'ai un événement de glissement de souris qui dessine un rectangle dans l'un des objets JPanel enfant. Je voudrais que les autres enfants JPanel dessinent la même chose de manière synchronisée.

Le premier problème rencontré est que généralement seul le composant le plus en haut résidant "sous" l'événement de souris reçoit la notification de l'événement de souris particulier, ce qui a du sens pour la plupart des applications. J'ai (presque) obtenu le comportement que je cherchais en abandonnant la route habituellement utilisée avec MouseListener et en utilisant enableEvents() pour activer différents événements de souris, puis en remplaçant processMouseEvent() et processMouseMotionMotionEvent() de sorte que chaque fonction distribue les événements de souris (avec des coordonnées modifiées à partir des coordonnées parentes) à chaque JPanel enfant pour dessiner ce qui est nécessaire. Cependant, je ne suis pas sûr si la route que j'ai choisie est la meilleure et je voulais avoir quelques opinions supplémentaires sur la question.

Une autre méthode que j'aurais aimé implémenter était de remplacer la méthode dispatchEvent( AWTEvent e ) et de distribuer les événements à chacun des panels enfants en appelant dispatchEvent sur chacun d'eux, mais malheureusement dispatchEvent( AWTEvent e ) n'est pas substituable.

Toute aide générale serait grandement appréciée.

1voto

Walter Laan Points 2328

Séparez le code d'entrée du code devant être peint.

Faites en sorte que les panneaux partagent un modèle qui leur indique ce qui doit être peint. Dans vos MouseListener(s) (ou basé sur d'autres entrées), ajoutez ce qui doit être peint au modèle, qui peut ensuite notifier les panneaux de se redessiner.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X