OVH Cloud OVH Cloud

Swing : Separation modele vue controleur

2 réponses
Avatar
Alexandre LARUE
Bonjour,

J'ai un petit souci de conception, je souhaite que les composants de mon
interface se mettent à jour des que l'etat de mon objet "modele" change.
Pour l'instant mon modele comporte 7 variables d'instance accessibles
par des getter/setter.
Un JSlider controle chacune de ces variables. Le probleme est que je
souhaite mettre en place un bouton qui réinitialise mon modele avec ses
valeurs par defaut et qui par consequent repositionne correctement les
JSlider.

J'ai deja essayé une solution avec les interface Observer/Observable
mais ce n'est pas tres convainquant : j'ai 7 JSlidObserver enregistrés
aupres de mon modele, mon idee etait alors d'appeler les methodes
setChanged() et NotifyObserver() dans chaque setter de mon modele. Or je
n'ai qu'une seule implémentation de update() dans JSlidObserver, du coup ils
se mettent tous à jour...

J'ai eu aussi l'idee de faire une classe JSlidObserver par variable
(JSlidObserverVar1, JSlidObserverVar2...) implementant chacune leur update()
mais il doit bien y avoir une solution plus "compacte"

Merci
Alex

2 réponses

Avatar
Anthony Goubard
Bonjour,

Ton modele doit avoir un object PropertyChange support.
Ensuite ton UI doit implementer PropertyChangeListener et invoker
model.getPropertySupport().addPropertyChangeListener(this)
Dans les methodes set ou reset tu dois invoker
propChange.firePropertyChange(...)

Ton UI est alors notifié à chaque fois qu'une valeur change
ensuite tu fait
if (propChangeEvent.getPropertyName().equals("reset") ...

Anthony
Alexandre LARUE a écrit dans le message
<3f8bf74c$0$15437$...
Bonjour,

J'ai un petit souci de conception, je souhaite que les composants de
mon

interface se mettent à jour des que l'etat de mon objet "modele" change.
Pour l'instant mon modele comporte 7 variables d'instance accessibles
par des getter/setter.
Un JSlider controle chacune de ces variables. Le probleme est que je
souhaite mettre en place un bouton qui réinitialise mon modele avec ses
valeurs par defaut et qui par consequent repositionne correctement les
JSlider.

J'ai deja essayé une solution avec les interface Observer/Observable
mais ce n'est pas tres convainquant : j'ai 7 JSlidObserver enregistrés
aupres de mon modele, mon idee etait alors d'appeler les methodes
setChanged() et NotifyObserver() dans chaque setter de mon modele. Or je
n'ai qu'une seule implémentation de update() dans JSlidObserver, du coup
ils

se mettent tous à jour...

J'ai eu aussi l'idee de faire une classe JSlidObserver par variable
(JSlidObserverVar1, JSlidObserverVar2...) implementant chacune leur
update()

mais il doit bien y avoir une solution plus "compacte"

Merci
Alex




Avatar
Alexandre LARUE
Merci !


"Anthony Goubard" a écrit dans le message de news:
HG9jb.237623$
Bonjour,

Ton modele doit avoir un object PropertyChange support.
Ensuite ton UI doit implementer PropertyChangeListener et invoker
model.getPropertySupport().addPropertyChangeListener(this)
Dans les methodes set ou reset tu dois invoker
propChange.firePropertyChange(...)

Ton UI est alors notifié à chaque fois qu'une valeur change
ensuite tu fait
if (propChangeEvent.getPropertyName().equals("reset") ...

Anthony
Alexandre LARUE a écrit dans le message
<3f8bf74c$0$15437$...
Bonjour,

J'ai un petit souci de conception, je souhaite que les composants de
mon

interface se mettent à jour des que l'etat de mon objet "modele" change.
Pour l'instant mon modele comporte 7 variables d'instance accessibles
par des getter/setter.
Un JSlider controle chacune de ces variables. Le probleme est que je
souhaite mettre en place un bouton qui réinitialise mon modele avec ses
valeurs par defaut et qui par consequent repositionne correctement les
JSlider.

J'ai deja essayé une solution avec les interface Observer/Observable
mais ce n'est pas tres convainquant : j'ai 7 JSlidObserver enregistrés
aupres de mon modele, mon idee etait alors d'appeler les methodes
setChanged() et NotifyObserver() dans chaque setter de mon modele. Or je
n'ai qu'une seule implémentation de update() dans JSlidObserver, du coup
ils

se mettent tous à jour...

J'ai eu aussi l'idee de faire une classe JSlidObserver par variable
(JSlidObserverVar1, JSlidObserverVar2...) implementant chacune leur
update()

mais il doit bien y avoir une solution plus "compacte"

Merci
Alex