2010-02-02 3 views
2

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.

+0

Est-il possible de mettre ma LinkedList directement dans un JList? – Aran

+0

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

Répondre

4

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é.

0

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.

2

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.

Questions connexes