簡體   English   中英

Java DefaultListModel包含奇怪元素的問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM