OVH Cloud OVH Cloud

[swing][JList] rafraichir l'affichage quand le model change.

2 réponses
Avatar
julien balas
Bonjour,

je suis en train de developper une petite appli pour me faire la main
sur MVC et swing et je bute sur un petit pb enervant.

La partie qui me pose pb pourrait etre par exemple l'abonnement a un
newsgroup.
J'ai un obj Model qui est une liste de NewsGroups, avec un etat abonné
ou pas pour chacun des groupe.
J'ai 2 Jlist, Une qui affiche les newsgroups auxquel ont est abonné, et
une autre qui affiche ceux auquels on n'est pas abonnée.
Pour ca j'ai deux obj intermediaire qui etendent "AbstractListModel", et
qui servent chacun a remplir une JList.

Avec 2 boutons "abonner" et "desabonner", j'envoi des evenement au
controleur, qui fait suivre au model.
Le model modifie bien l'etat des groups.

Pour que mes "AbstractListModel" soit informé des modifs, j'ai mis mon
model "observable" et mes AbstractListModel "observer".
Avec un petit System.out, je vois qu'effectivement mes AbstractListModel
sont informé des changements du model et que les données qu'ils ont sont
mise a jour.
MAIS je n'arrive pas a faire rafraichir mon interface graphique, mes JList.
Faut-il que je mette en place un autre etage d'observer/observable entre
les abstractListModel et les JList ?
Faut-il abonner mes JList aux modifs du model (et pas les
AbstractListModel)?
Les AbstractListModel doivent-ils forcer le repaint des composants
graphique?

Dans plusieurs exemples de SUN, c'est la vue qui indique au ListModel de
supprimer ou ajouter des lignes, je trouve ca bizarre...
http://java.sun.com/docs/books/tutorial/uiswing/components/list.html#mutable
http://java.sun.com/docs/books/tutorial/uiswing/events/example-1dot4/ListDataEventDemo.java
Est-ce parceque dans leurs exemple le model et le ListModel sont confondu?

Cordialement,
--
Julien

2 réponses

Avatar
Simon OUALID
julien balas wrote:
Les AbstractListModel doivent-ils forcer le repaint des composants
graphique?


N'aurais tu pas oublié d'appeler fireIntervalAdded de AbstractListModel
après avoir modifié ton modèle ? Normalement c'est lui qui se charge de
la mise à jour graphique.

http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/AbstractListModel.html#fireIntervalAdded(java.lang.Object,%20int,%20int)

A+

Symon

Avatar
julien balas
Simon OUALID wrote:
julien balas wrote:

Les AbstractListModel doivent-ils forcer le repaint des composants
graphique?



N'aurais tu pas oublié d'appeler fireIntervalAdded de AbstractListModel
après avoir modifié ton modèle ? Normalement c'est lui qui se charge de
la mise à jour graphique.


c'etait effectivement ca, merci

Par contre ma chaine d'evenement est

Vue(JList) --(methode)--> Controleur --(methode) --> Metier --(update
via observable/observer)--> ListModel --(fireInterval)--> Vue(JList)

est ce que c'est correcte vis a vis du model MVC ?

--
Julien