web-dev-qa-db-fra.com

Actualiser JList dans un JFrame

J'ai une liste JList qui affiche les informations d'un vecteur. L'utilisateur peut ensuite ajouter et supprimer des informations de ce vecteur. Est-il possible d'actualiser la JList dans mon JFrame lorsque des éléments sont ajoutés/supprimés du vecteur? Actuellement je fais ..

 list = new JList(names);
 jframe.add(new JScrollPane(list), BorderLayout.CENTER);

mais cela ne rafraîchit pas la liste JList avec quelque chose de nouveau. J'ai vérifié et le contenu de mon vecteur, etc. change, mais la liste n'est pas rafraîchissante. Pourquoi? Comment puis-je le réparer?

20
Skizit

Vous ne devriez pas mettre à jour le vecteur. Les modifications doivent être apportées directement à ListModel, puis la table se repeindra automatiquement.

Si vous décidez de recréer le ListModel en raison des modifications apportées au vecteur, vous mettez à jour la liste en procédant comme suit:

list.setModel( theNewModel );

Edition: Oubliez le vecteur et chargez les données directement dans le DefaultListModel:

DefaultListModel model = new DefaultListModel();
model.addElement( "one" );
model.addElement( "two" );
JList list = new JList( model );

Désormais, chaque fois que vous devez modifier les données, vous mettez à jour le modèle directement à l'aide des méthodes addElement (), removeElement () ou set (). La liste sera automatiquement repeinte.

27
camickr

Appelez updateUI sur Jlist après avoir modifié votre vecteur.

3
gerardw

Je pense avoir trouvé la solution pour le rafraîchissement graphique de Jlist. Essayez d'appeler cette méthode après chaque ajout ou suppression d'un élément du modèle détenu par Jlist.

Jlist_name.ensureIndexIsVisible (nom_modèle.getSize ());

1
Cousin Roy

vous pouvez utiliser list.setListData (vecteur) chaque fois que le vecteur change

0
Ikkesh Ramanna