Java - mise à Jour JList après la modification d'un objet
J'ai une JList qui utilise un DefaultListModel.
J'ai ensuite ajouter des valeurs pour le modèle qui apparaissent alors dans la JList. J'ai créé un MouseListener qui (lors d'un double clic) permet à l'utilisateur d'éditer le numéro d'utilisateur de la personne qu'ils ont choisi.
J'ai vérifié que le véritable objet de ce dossier est en cours de modification, et de il est. Le seul problème que je vais avoir c'est d'avoir la réelle Jlist à jour pour afficher les nouvelles valeurs de cet objet.
Des extraits de l'actuel code que j'ai sont:
De la création de la JList et DefaultTableModel:
m = new DefaultListModel();
m.addListDataListener(this);
jl = new JList(m);
jl.addMouseListener(this);
La mise à jour de l'objet:
String sEditedNumber = JOptionPane.showInputDialog(this, "Edit number for " + name, number);
if (sEditedNumber != null) {
directory.update (name, sEditedNumber);
}
Et (quand jl est la JList et m est le DefaultTableModel):
public void contentsChanged(ListDataEvent arg0) {
jl.setModel(m);
}
- Pourquoi êtes-vous à l'aide d'un
MouseListener
au lieu d'unListSelectionListener
?
Vous devez vous connecter pour publier un commentaire.
Vous devez appeler
fireContentsChanged()
sur le ListModel.DefaultListModel
déjà fait.Au lieu de
setModel()
, mise à jour de votre modèle à l'aide de l'un desDefaultListModel
des méthodes telles quesetElementAt()
, quifireContentsChanged()
pour vous.Vous devez appeler
DefaultListModel.fireContentsChanged()
. Mais comme cette méthode est protégé (je me demande vraiment pourquoi), vous ne pouvez pas le faire directement. Au lieu de cela, faire un petit sous-classe:L'utiliser comme votre liste modèle:
Après la mise à jour d'un numéro d'utilisateur, mise à jour de l'entrée correspondante:
m.update(theIndex);
Alternativement, si vous ne voulez pas une sous-classe, vous pouvez simplement remplacer la JList élément après que l'utilisateur a changé de numéro de:
m.setElementAt(theSameElement, theIndex);
. Si c'est un peu lourd et avoir une sous-classe semble le plus propre approche.