Est-il possible de faire en sorte que DefaultListModel utilise le contenu d'une LinkedList à afficher?Get DefaultListModel pour utiliser LinkedList
Ceci doit ensuite être utilisé avec un JList.
Est-il possible de faire en sorte que DefaultListModel utilise le contenu d'une LinkedList à afficher?Get DefaultListModel pour utiliser LinkedList
Ceci doit ensuite être utilisé avec un JList.
Oui, il est possible: Il vous suffit de sous-classe AbstractListModel
et passer outre getElementAt
et getSize
appeler par votre LinkedList
sous-jacente.
public class MyListModel extends AbstractListModel {
private final List<?> l;
public MyListModel(List<?> l) {
this.l = l;
}
public Object getElementAt(int index) {
return l.get(index);
}
public int getSize() {
return l.size();
}
}
Avertissement: Lors de la mise en œuvre ListModel
ou TableModel
et soutenant le modèle avec un List
je conseillerais à l'aide ArrayList
sur LinkedList
pour assurer O (1) le temps d'accès lors de l'accès à un élément donné.
Sauf si vous le sous-classez et remplacez toutes les méthodes implémentées, non. mais vous pouvez ajouter tous les éléments d'un LinkedList à DefaultListModel (peuplant le vecteur sous-jacente)
for (Object element : linkedList)
model.addElement(element);
ou tout simplement écrire votre propre implémentation de AbstractListModel en utilisant une LinkedList/Liste/Collection comme source.
DefaultListModel
utilise Vector
comme liste d'accompagnement. Ceci est un membre privé, donc vous n'avez pas vraiment une option étendre et contourner comment cela fonctionne. Si vous devez utiliser un LinkedList
, vous devrez probablement écrire votre propre implémentation de modèle de liste (par exemple, étendre AbstractListModel
comme modèle de liste par défaut), ou faire une boucle dans votre liste et ajouter chaque objet au modèle de liste.
Est-il possible de mettre ma LinkedList directement dans un JList? – Aran
La chose la plus proche que vous pouvez faire est de construire un JList et passer dans un vecteur. Cependant, je vous recommande plutôt de sous-classer AbstractListModel (voir ma réponse) car cela signifie que vous n'avez pas besoin de recourir aux collections JDK 1.1. Si vous décidez d'emprunter cet itinéraire, n'oubliez pas de notifier votre JList (via le modèle) si vous modifiez le contenu du vecteur. – Adamski