代码之家  ›  专栏  ›  技术社区  ›  trim24

通过调用firedatachanged正确更新Jlist

  •  0
  • trim24  · 技术社区  · 7 年前

    我在下面的代码中为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..*/
    

    AbstractListNodel具有以下功能

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

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

    那么,如何正确调用该函数,需要做哪些额外的更改?

    2 回复  |  直到 7 年前
        1
  •  0
  •   Strahinja    7 年前

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

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

    通过这种方式,您可以从任何地方访问它。

        2
  •  0
  •   trim24    7 年前

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