当ListModel在java中更改时,如何更新JList?

时间:2012-03-12 08:28:36

标签: java swing jlist

我有一个JList,我使用DefaultListModel来存储列表条目。 我在该面板上有一个按钮。单击该按钮时,我向DefaultListModel添加新条目。

按钮actionPerformed:

我的问题是,在我对我的DefaultListModel进行操作后,JList的内容没有改变,我想知道在对ListModel进行更改后,是否需要在JList上调用一种刷新方法?

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 个答案:

答案 0 :(得分:3)

尝试调用DefaultListModel

的方法
protected void fireContentsChanged(Object source, int index0, int index1)

答案 1 :(得分:3)

1)删除代码行panel.updateUI();此代码行约为Look And Feels

2)Swing is single threaded并且必须在EDT上对Swing GUI进行更新,否则GUI的内容或更改不可见或内容未刷新或冻结

3)您已查看SwingWorker在后台任务上加载JList's Item,然后从SwingWorker输出到GUI将在EDT上完成