2010-07-16 7 views
5

OK, so habe ich eine JList und der Inhalt ist mit einem Array zur Verfügung gestellt. Ich weiß, wie man einem Array Elemente hinzufügt, aber ich möchte wissen, wie man eine JList aktualisiert ... oder ist es überhaupt möglich? Ich habe Google ausprobiert. : \Java ein Array in jList aktualisieren

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) { 

    } 
} 

Irgendwelche Ideen?

Vielen Dank.

Antwort

7

Ein guter Ansatz besteht darin, ein ListModel zu erstellen, um die Daten für Sie zu verwalten und Aktualisierungen zu verwalten.

Etwas wie:

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

Dann können Sie einfach Änderungen über die Liste Modell machen z.B.

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

Sie müssen nur Ihr eigenes Listmodel liefern:

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); 
    } 
} 

Nach dem Sortieren Artikel, nur update nennen.