2014-02-08 46 views
-2

我創建了一個帶有自定義ListModel的jList來顯示一些對象(用戶)。我嘗試使用dao架構。當我使用des DAO類向我的集合添加聯繫人時,Listmodel不會更新。看來listmodel被銷燬了。將一個java.util.list關聯到一個列表模型

這是我的Jlist與customListModel。

> 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被銷燬。

對不起我的英文不好

+3

你需要發佈相關的代碼,沒有它就不可能回答你的問題。 –

+0

定義 - _「破壞」_ –

+0

投票結束在當前狀態下無法回覆。請改進。 –

回答

1

JList的不刷新,因爲它沒有辦法知道的東西已經被添加到數據庫中,它應該這樣再問模式,爲新的元素。當您向數據庫中添加某些內容時,您必須觸發一個事件,或者將具有新列表的新模型替換爲列表的模型。

順便說一句,如果您不打算使用DefaultListModel封裝的數據,則不應擴展DefaultListModel,而應擴展AbstractListModel。請參閱其fireXxx()方法來觸發事件。

+0

非常感謝Jb,它的工作原理!添加一個用戶與我的服務後,我設置一個新的listmodel到我的jList。 可以做同樣的事情,而不必每次我改變我的清單時重置listmodel?我搜索瞭如何使用fire *()方法,但我沒有找到簡單的導師。 – obiyadi

+0

+1作業爲AbstractListModel – mKorbel

相關問題