通过调用 firedatachanged 正确更新 Jlist

Correctly updating Jlist by calling firedatachanged

所以我需要动态更新jList。我读到我必须使用 fireData.... 或类似的东西,具体取决于 api.

我在以下代码中为 jList 使用 AbstractListModel。

 /*private javax.swing.JList<String> anycast_users;*/

void set_user_model(){

       anycast_users.setModel(new javax.swing.AbstractListModel<String>() {

        @Override
        public int getSize() {
            return anycast_users_num;
        }

        @Override
        public String getElementAt(int i) {
            return anycast_users_list[i];
        }
    });
    /*listeners and other init..*/

AbstractListNode 有这个功能

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

所以,要更新我最初尝试的列表

anycast_users.getModel().  //in a different function (updateList())

但是由于 fireContentsChanged 受到保护,我无法从这里调用它。 那么,如何正确调用该函数,需要做哪些额外的改动呢?

我会在 class 中创建一个方法,您可以在其中访问模型并制作如下内容:

public ListModel<String> getAnycastUsersModel() {
  return this.anycast_users.getModel();
}

这样您就可以随时随地访问它。 如果可以的话,我建议您使用 DefaultListModel :)

我将采用 MadProgrammer 建议的解决方案。

class anycastModel extends javax.swing.AbstractListModel<String>{


    @Override
    public int getSize() {
        return anycast_users_num;
    }

    @Override
    public String getElementAt(int i) {
       return anycast_users_list[i];
    }

    public void updateList(){

        fireContentsChanged(this, 0, anycast_users_num);
    }
}
void set_usermodel(){
    anycast_model=new anycastModel();
    anycast_users.setModel(anycast_model);
}

待更新

anycast_model.updateList();