Java обновляет массив в JList - PullRequest
5 голосов
/ 16 июля 2010

ОК, поэтому у меня есть JList, а содержимое снабжено массивом.Я знаю, как добавить элементы в массив, но я хочу знать, как обновить JList ... или это вообще возможно?Я попробовал Google.: \

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

    }
}

Есть идеи?

Спасибо.

Ответы [ 2 ]

7 голосов
/ 17 июля 2010

Один хороший подход - создать ListModel для управления данными и обработки обновлений.

Что-то вроде:

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

Затем вы можете просто внести изменения через модель списка, например,

listModel.addElement("New item");
listModel.removeElementAt(1); // remove the element at position 1
6 голосов
/ 17 июля 2010

Вам просто нужно указать собственную 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);
    }
}

После сортировки предметов просто позвоните update.

...