2012-02-23 5 views
0

J'ai implémenté mon propre ListCellRenderer pour mon application de chat. J'utilise un JList pour lister tous les utilisateurs. Le rendu de cellule consiste principalement en une icône qui s'affiche si un utilisateur particulier est actuellement en ligne ou hors ligne et son nom. La liste est contrôlée par un DefaultListModel que j'utilise pour fournir à JList les informations nécessaires.Java: Comment mettre à jour ListCellRenderer personnalisé?

Mais lorsque le modèle de liste change d'état (par exemple, un utilisateur se déconnecte), le rendu de cellule de liste ne semble pas être appelé?

Quelqu'un sait-il comment résoudre ce problème? J'ai essayé d'appeler updateUI() sur l'instance de JList, mais cela n'a pas aidé.

Merci beaucoup d'avance!

+0

Montrez-nous le code. Le moteur de rendu doit être appelé lorsque le modèle change. Vous avez probablement oublié de déclencher un événement pour signaler que le modèle a changé. –

Répondre

4

Le rendu de cellule fonctionne probablement correctement. Ce qui ne fonctionne pas, c'est le ListModel. Le DefaultListModel ne détecte pas les modifications apportées à l'état interne des objets du modèle. Vous devez appeler fireContentsChanged sur le modèle de liste. Vous avez probablement besoin d'ajouter des écouteurs à vos objets de modèle et peut-être même d'étendre le DefaultListModel; comme je ne vois pas le code, je ne sais pas à quoi ressemble le tien.

Vous ne devriez pas simplement appeler une méthode aléatoire avec un nom qui sonne bien (updateUI fait quelque chose de très différent).

+0

merci beaucoup pour la réponse rapide. Je vais essayer d'appeler fireContentsChanged, puisque cette méthode est protégée, je devrai en fait étendre le DefaultListModel. – salocinx

+1

btw. le javadoc dit pour JList.UpdateUI() la fonction suivante: Si le renderer de cellule courant a été installé par le développeur (plutôt que l'aspect et la sensation lui-même), ceci rend également le moteur de rendu de cellule et ses enfants mis à jour ... seulement sonne bien, mais aussi utile pour mon problème. tu ne penses pas? – salocinx

+0

cela fonctionne :-) merci beaucoup pour votre aide! – salocinx

Questions connexes