繁体   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