2010-07-16 71 views
5

OK vì vậy tôi có một JList và nội dung được cung cấp với một mảng. Tôi biết làm thế nào để thêm các yếu tố vào một mảng nhưng tôi muốn biết làm thế nào để làm mới một JList ... hoặc là nó thậm chí có thể? Tôi đã thử Google. : \java làm mới một mảng vào 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) { 

    } 
} 

Bất kỳ ý tưởng nào?

Cảm ơn bạn.

Trả lời

7

Một cách tiếp cận tốt là tạo một ListModel để quản lý dữ liệu cho bạn và xử lý các cập nhật.

Cái gì như:

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

Sau đó, bạn chỉ có thể thực hiện thay đổi qua mô hình danh sách ví dụ

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

Bạn chỉ cần cung cấp ListModel riêng bạn:

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

Sau khi phân loại mặt hàng, chỉ cần gọi update.

Các vấn đề liên quan