![](/img/trans.png)
[英]Java Swing DefaultListModel containing storing more information
[英]Java DefaultListModel weird element-containing issue
我正在編寫帶有swing組件的Java應用程序。 我有2個JList,它們是從DefaultListModel中獲取數據的,它們是這些2:
private DefaultListModel<Module> moduleListModel;
private DefaultListModel<Module> sem1ListModel;
模塊是我創建的數據類。
現在的問題是,如果它們也在sem1ListModel中,我想從我的moduleListModel中刪除它們。 我知道sem1ListModel中有3個模塊,它們也在defaultListModel中,我用來檢查是否包含它們的代碼是:
for(int i = 0; i < sem1ListModel.getSize(); i++){
Module mod = sem1ListModel.getElementAt(i);
System.out.println(mod);
if(moduleListModel.contains(mod)){
System.out.println(mod);
moduleListModel.removeElement(mod);
}
}
該代碼應該可以正常工作,因為兩個模塊完全相同,但事實並非如此! 當我將兩個DefaultListModel都打印到輸出窗口時,得到以下信息:
System.out.println(sem1ListModel);
System.out.println(moduleListModel);
sem1ListModel: [軟件開發1 [7學分],ICT管理1 [7學分],DOA I [6學分]] moduleListModel: [DOA I [6學分],軟件開發1 [7學分],ICT管理1 [7學分] ],網頁設計2 [5學分],軟件1 [5學分]]
如您所見, 軟件開發1 [7學分],ICT管理1 [7學分],DOA I [6學分]是兩個DefaultListModels中的3個模塊,應將其從moduleListModel中刪除,但這不會發生。
我究竟做錯了什么?
我只是從評論中回答,所以這不會掛在嘴邊。
問題在於, Module
對象實際上是不同的實例,並且沒有覆蓋equals
。 這意味着,即使它們通過重寫的toString
打印了相同的內容,模型也會將它們視為不同的對象,並且不會執行刪除操作。
解決此問題的標准方法是覆蓋equals
(和hashCode
,以防您想使用哈希數據結構)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.