Как я могу сделать обновление JList, когда ListModel изменился в Java? - PullRequest
2 голосов
/ 12 марта 2012

У меня есть JList, и я использую DefaultListModel для хранения записей списка. У меня есть кнопка на этой панели. Когда кнопка нажата, я добавляю новую запись в DefaultListModel.

действие кнопки Выполнено:

Моя проблема в том, что после того, как я выполнил операцию на моей DefaultListModel, содержимое JList не изменилось, мне интересно, нужно ли мне вызывать метод обновления в JList после того, как я внесу изменения в ListModel?

public void actionPerformed(ActionEvent e) {
        ModifyXMLFile.create(FileList.listModel);
        FileList.fileList1.revalidate();
    }

Класс JList:

public class FileList {
public static DefaultListModel listModel;
public static WebList fileList1 = null;
public static Component getGui(File[] all) {
    listModel = new DefaultListModel();
    for(File file:all){
      listModel.addElement(file);
    }
    final WebList fileList = new WebList(listModel);
    fileList1=fileList;
    fileList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    fileList.setCellRenderer(new FileRenderer(!vertical));

    fileList.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {


    });     
}

Ответы [ 2 ]

3 голосов
/ 12 марта 2012

1) удалить строку кода panel.updateUI(); эта строка кода составляет примерно внешний вид

2) Swing однопоточный и обновления графического интерфейса Swing должнысделать на EDT, иначе содержимое или изменения в графическом интерфейсе не будут видны или содержимое не будет обновлено или остановлено

3) вы смотрите SwingWorker для загрузки JList's Item на фонезадание, затем вывод из SwingWorker в GUI будет осуществляться на EDT

3 голосов
/ 12 марта 2012

Попробуйте вызвать метод DefaultListModel

protected void fireContentsChanged(Object source, int index0, int index1)
...