2010-07-16 4 views
5

OK, donc j'ai un JList et le contenu est fourni avec un tableau. Je sais comment ajouter des éléments à un tableau mais je veux savoir comment rafraîchir un JList ... ou est-ce même possible? J'ai essayé Google. : \java rafraîchit un tableau dans jList

import java.applet.Applet; 
import java.awt.*; 
import javax.swing.*; 
import java.awt.event.*; 


public class bs extends JApplet implements MouseListener { 

public static String newline; 
public static JList list; 

    public void init() { 



      String[] data = {"one", "two", "three", "four"}; 
       list = new JList(data); 



     this.getContentPane().add(list); 

     list.addMouseListener(this); 

     String newline = "\n"; 

     list.setVisible(true); 

    } 

    public void refresh(){ 
     Address found; 
     this.listModel.clear(); 

     int numItems = this.getAddressBookSize(); 
     String[] a = new String[numItems]; 
     for (int i=0;i<numItems;i++){ 
      found = (Address)Addresses.get(i); 
      a[i] = found.getName(); 
     } 
     /* attempt to sort the array */ 
     Arrays.sort(a, String.CASE_INSENSITIVE_ORDER); 
     for (int i=0;i<numItems;i++) { 
      this.listModel.addElement(a[i]); 
     } 
    } 



    public void mousePressed(MouseEvent e) { } 

    public void mouseReleased(MouseEvent e) { 
     Object index = list.getSelectedValue(); 
     System.out.println("You clicked on: " + index); 
    } 

    public void mouseEntered(MouseEvent e) { } 

    public void mouseExited(MouseEvent e) { } 

    public void mouseClicked(MouseEvent e) { } 




    public void paint(Graphics g) { 

    } 
} 

Des idées?

Merci.

Répondre

7

Une bonne approche consiste à créer un ListModel pour gérer les données et gérer les mises à jour.

Quelque chose comme:

DefaultListModel listModel=new DefaultListModel(); 
for (int i=0; i<data.length; i++) { 
    listModel.addElement(data[i]); 
} 
list=new JList(listModel); 

Ensuite, vous pouvez simplement effectuer des modifications via le modèle de liste par exemple

listModel.addElement("New item"); 
listModel.removeElementAt(1); // remove the element at position 1 
6

Vous avez juste besoin de fournir votre propre ListModel:

class MyModel extends AbstractListModel { 
    private String[] items; 

    public MyModel(String[] items) { 
     this.items = items; 
    } 

    @Override 
    public Object getElementAt(int index) { 
     return items[index]; 
    } 

    @Override 
    public int getSize() { 
     return items.length; 
    } 

    public void update() { 
     this.fireContentsChanged(this, 0, items.length - 1); 
    } 
} 

Après le tri des articles, il suffit d'appeler update.