Classe qui écoute une de ses variable de classe

Résolu
Signaler
Messages postés
4
Date d'inscription
jeudi 15 janvier 2009
Statut
Membre
Dernière intervention
4 février 2009
-
Messages postés
744
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
9 mai 2010
-
Bonjour dans le cadre du développement d'une application graphique, je suis en train de créer une Classe de type JPanel qui est entre autre chargée d'afficher une image à une échelle donnée. Etant donné qu'au sein d'un frame il peut y avoir de multiple instance de cette Classe, la variable représentant l'échelle "scale" est une variable de classe que toutes les instances partage afin de garantir que toute les images sont affichées à la même échelle.

Y a t il moyen que cette classe s'écoute elle même ? (du moins la variable de classe) et provoque par exemple un repaint chaque fois que cette valeur est modifiée (quelque soit l'instance cause de cette modifiation) ?

Merci pour vos suggestions.

7 réponses

Messages postés
744
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
9 mai 2010
8
Salut,
Juste une précision, pourquoi veux tu que tous tes panels partagent la même valeur scale?
Il serait pas intéressant d'avoir pour chaque panel un zoom à eux?
Je crois avoir cerné ton projet, un genre de paint (du moins du dessin) dans des panel, avec plusieurs panel en simultané... et avec un nombre X de panel...
Regarde cette classe JInternalFrame , je pense qu'elle pourrait t'intéresser
Sinon, il est très possible de faire ce que tu veux, c'est à dire de mettre le WheelListener dans AfficheImage mais pour informer les autres soeurs, il faudrait que tu aies accès au père pour appeller une méthode qui liste toutes les soeurs. Tu vois?
->Le pere détient un ArrayList de toutes les filles.
->Chaque fille prend en paramètre du constructeur l'instance du père ou alors tu fais un singleton pour le père ( 
   public static Pere getInstance() { return objetStatiquePere == null? new Pere() : objetStatiquePere;}
      )
->Dans les filles tu peux appeler la méthode qui récupère toutes les soeurs en passant par le pere

<hr width="100%" size="2" />
 C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...
Messages postés
744
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
9 mai 2010
8
Salut,

ben euh... tu fais un setter et dans ce setter tu affectes la nouvelle valeur à ta variable scale et tu lances un repaint...

<hr width="100%" size="2" />
 C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...
Messages postés
4
Date d'inscription
jeudi 15 janvier 2009
Statut
Membre
Dernière intervention
4 février 2009

Bonjour, merci pour votre réponse et votre temps passé à me répondre.

Je voudrais préciser ma question :

J'ai donc ma classe "AfficheImage extend JPanel" et une variable de classe "scale" (l'échelle à laquelle les images doivent être affichées dans toutes les insances de AfficheImage.

et deux instances (ou plus) de cette classe "inst1" et "inst2" qui sont insérées dans un JFrame

Si je fait un repaint() avec un setter au sein de la classe, seule l'instance de AfficheImage concernée sera repeinte à l'échelle contenue dans la variable de classe scale (partagée par inst1 et inst2).

Je voudrais pouvoir créer autant d'instances que désirées et que toutes ces instances écoutes la variable "scale" mon but est donc que la classe ainsi créée s'écoute elle même et toutes ses soeurs.

Merci.
Messages postés
744
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
9 mai 2010
8
Salut,

Dans ton JFrame, tu devrais faire un ArrayList comme ça tu pourrais passer tous tes panels un par un afin de lancer le setter (et donc le repaint) qu'il faut.

<hr width="100%" size="2" />
 C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...
Messages postés
4
Date d'inscription
jeudi 15 janvier 2009
Statut
Membre
Dernière intervention
4 février 2009

Re-bonjour et merci encore. Même si je n'ai encore jamais utilisé les ArrayList, je comprend bien le principe et ça a l'air d'être une très bonne idée, merci. Mais j'ai encore une question :

Comment le JFrame va t'il être mis au courant d'un changement de valeur de la variable de classe par une des instances de "AfficheImage" ?

Actuellement j'ai mis un WheelListener dans la classe qui contient les instances de "AfficheImage" puisque c'est via la roulette souris que l'on zoome mais je pensais qu'il y avait moyen de faire ça au sein de la classe AfficheImage pour qu'elle écoute toute ses soeurs via la variable de classe, histoire d'encapsuler un max de fonctionnalité dans cette classe.

J'aurai voulu (si celà est possible bien sur) laisser le listener sur la roulette dans la classe "AfficheImage" mais
que celle ci informe ses soeurs d'un changement d'échelle (quelque soit le nombre de soeurs).

J'espère que je m'exprime correctement car je sais que les termes sont hypers important pour saisir un problème et je suis un débutant.

Merci.
Messages postés
4
Date d'inscription
jeudi 15 janvier 2009
Statut
Membre
Dernière intervention
4 février 2009

Merci beaucoup pour cette réponse, cela me donne une bonne ligne de conduite à suivre pour arriver à ce que je veux faire. Étant assez nouveau dans le monde JAVA et la POO, j'ai parfois peur de ne pas faire les choses correctement.

Pour répondre à ta question, si j'ai besoin que le facteur de zoom soit partagé par plusieurs vues c'est parcequ'il s'agit ici de trouver des points homologues dans des images qui ont à priori la même échelle. Mais dans l'absolu, j'aurai aimé que cette classe soit utilisable en version : une, deux, trois ou n instances suivant le nombre d'image dans lesquelles il faut saisir des points homologues.

Je vais donc passer par une classe père qui contiendra l'arrayList de toutes les filles et passera à toutes les filles l'instance du père.

Merci beaucoup en tout cas pour ton aide.

PS: le singleton je ne connais pas mais je m'en vais googler celà pour comprendre !
Messages postés
744
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
9 mai 2010
8
Salut,
Attention, je ne me prétends en aucun cas expert, et ce que je t'ai dis et peut être faux... et mal conçu! Je ne sais pas trop, comme je te l'ai dis, je ne suis pas un méga expert...
Par contre... pourquoi ne mets tu pas le wheellistener sur le frame? Et ensuite, tu enverrais la modification du scale à toutes les filles?

As tu regardé la classe JInternalFrame? je pense que cela pourrait t'intéresser dans ton cas.
Bonne chance en tout cas dans tes recherches etc...

<hr width="100%" size="2" />
 C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...