将java.util.list与listmodel相关联

时间:2014-02-08 01:56:36

标签: java swing jlist defaultlistmodel

我创建了一个带有自定义ListModel的jList来显示一些对象(User)。我尝试使用dao架构。当我使用des DAO类向我的集合添加联系人时,Listmodel不会更新。似乎listmodel被破坏了。

这是我的带有customListModel的Jlist。

>    Service dcs = new DefaultService(MyDao);
>    CustomListModel cList = new CustomListModel( dcs );
>    list = new JList<>(cList);
>    list.addMouseListener(new ContactListItemListener(list,this.dcs));

CustomListModel:

public class CustomListModel extends DefaultListModel<Contact>{

    private ContactService dcs ;

    public CustomListModel(ContactService dcs) {
        this.dcs = dcs;
    }

    @Override
    public void addListDataListener(ListDataListener arg0) {
        // TODO Auto-generated method stub

    }
    @Override
    public Contact getElementAt(int i) {
        System.out.println(dcs.list().size()+"  Test "+dcs.list()); //just for testing
        return dcs.list().get(i);

    }

    @Override
    public int getSize() {
        return dcs.list().size();
    }

    @Override
    public void removeListDataListener(ListDataListener arg0) {
        // TODO Auto-generated method stub

    }

}

并且在我的听众的ActionPerformed中:

    public void actionPerformed(ActionEvent e) {
        this.dcs.add(new User());
}

当执行actionperformed时,新用户被添加到我的用户列表中,但是customListModel不显示测试消息,似乎customListModel被销毁。

抱歉我的英文不好

1 个答案:

答案 0 :(得分:1)

JList不刷新,因为它无法知道某些内容已添加到数据库中,因此它应该再次向模型询问新元素。您必须在向数据库添加内容时触发事件,或者使用具有新列表的新模型替换列表模型。

顺便说一句,如果您不打算使用DefaultListModel封装的数据,则不应扩展DefaultListModel,而应扩展AbstractListModel。请参阅其fireXxx()方法来触发事件。