通过调用firedatachanged正确更新Jlist

时间:2017-09-22 07:49:22

标签: java jlist

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

我在下面的代码中使用了AbstractListModel作为jList。

 /*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..*/

AbstractListNodel具有此功能

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

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

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

但是当fireContentsChanged受到保护时,我无法从此处调用它。 那么,如何正确调用函数,以及需要进行哪些其他更改?

2 个答案:

答案 0 :(得分:0)

我会在该类中创建一个方法,您可以访问该模型并进行如下操作:

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

这样您就可以从任何地方访问它。 如果你能够:)我会建议你使用DefaultListModel。

答案 1 :(得分:0)

我将使用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();