2010-10-02 29 views
1

Ok, donc je travaille sur un devoir, et j'utilise SWING pour faire une interface graphique pour un projet Java, et je rencontre des problèmes avec JList.Super simple java swing jlist question que je ne peux pas comprendre!

J'ai un objet client que j'ai créé et défini des attributs, et je veux ajouter l'objet dans un TreeMap. Je veux raccorder le Treemap afin que tous les objets de la map se peuplent (l'attribut name de toute façon) dans JList.

J'ai fait beaucoup de recherches, et je vois beaucoup de choses sur le codage de ces choses à partir de rien, mais peu de choses sur la mise en œuvre de Swing. Je place mon objet client sur ma carte et je voudrais que mon JList reflète le contenu de la carte, mais je ne sais pas comment l'accrocher.

customers.put(c.getName(), c); 
    this.customerList.(What can I do here? add Customer object?? I can't find what I need); 

Merci pour votre aide !!!

+0

Vous devriez jeter un coup d'oeil sur le tutoriel de swing (http://download.oracle.com/javase/tutorial/uiswing/components/list.html). – tangens

Répondre

1

Vous devez créer un modèle de liste personnalisé qui renvoie des objets à placer dans chaque ligne d'un JList. TreeMap n'est pas accessible avec un index, vous aurez donc besoin d'autre chose. L'idée générale est la suivante: (de JList javadoc):

ListModel bigData = new AbstractListModel() { 
    ArrayList customers; 
    public int getSize() { return customers.size() } 
    public Object getElementAt(int index) { return customers.get(index); } 
}; 

JList bigDataList = new JList(bigData); 

cette façon lorsque vous mettez à jour votre collection, il suffit d'appeler revalidate() ou repaint() sur le JList et il mettra à jour son contenu aussi.

1

donc je travaille sur un devoir

Alors, quelle est l'affectation exactement? Vous nous avez donné votre solution, mais comme nous ne connaissons pas les besoins réels, nous ne pouvons pas savoir si vous êtes sur la bonne voie ou non.

Etes-vous obligé d'utiliser une TreeMap pour stocker les objets? Parce que ce n'est pas une bonne collection à utiliser pour votre ListModel puisque vous ne pouvez pas accéder directement aux objets.

Ou est-ce que l'affectation consiste simplement à afficher des données d'un objet dans un JList? Si oui, vous pouvez utiliser le DefaultListModel. Tout ce que vous devez faire est de remplacer la méthode toString() de votre objet personnalisé pour que l'attribut "name" apparaisse dans la liste.