Bonjour,
Je développe une application Java Swing — désolé hein, j’ai pas eu le choix — avec une structure MVC : le modèle et la vue sont séparés, tandis que le contrôleur… Pour l’instant, la couche contrôleur se rapporte aux classes MouseListener
anonymes…
L’application utilise un canevas ( une extension de JPanel
avec un paintComponent
maison ) pour afficher les éléments graphiques ; chaque entité modèle est représentée par une image.
Ma question est simple : où et comment faire le choix de l’image — celui-ci dépend du type de l’entité considérée, et peut varier selon les valeurs de ses propriétés, par exemple : un personnage qui grossit visuellement quand la valeur de son poids augmente ?
Je suppose qu’une flopée de if (... instanceof ... && ... == ...)
dans le paintComponent
me vaudrait une radiation de l’ordre des programmeurs qui ont une âme…
Cordialement, Novax.
PS : Il me semble que pour charger une image the right way en Swing, on utilise getClass().getResource("...")
, ce qui m’intéresse ici touche plus à la manière et l’endroit auxquels on fait le choix, dans le but de ne pas poutrer sa belle structure MVC de bon matin…
PPS : Si vous avez une meilleure idée pour le titre du sujet, je suis également preneur.
Solution
- Solution 1 : implémenter une interface
Drawable
dans les classes modèle ; - Solution 2 : faire implémenter cette interface à des classes suivant le pattern Adapter.
: ça n’est pas le plus important, mais il est bon de remarquer que les classes * Adapter
ne pointent pas sur les bonnes classes modèle ( Ant
et Dog
sont inversées ) sur le diagramme… Ce défaut ne sera vraisemblablement jamais corrigé.
Note : les solutions présentées n’ont pas encore été testées !