2014-05-19 10 views
0

스윙 구성 요소가있는 Java 응용 프로그램을 작성하고 있습니다. Java DefaultListModel 이상한 요소가 포함 된 문제

private DefaultListModel<Module> moduleListModel; 
private DefaultListModel<Module> sem1ListModel; 

모듈

내가 생성 한 dataclass이다 : 나는이 둘을 되 DefaultListModel에서 데이터를 얻을이 JList의를 가지고있다.

이제는 sem1ListModel에도있는 경우 moduleListModel에서 모듈을 제거하고 싶습니다. 나는 defaultListModel도 있습니다 sem1ListModel 3 개 모듈이 알고, 그리고 그들입니다 포함 된 경우 내가 사용하는 코드를 확인하려면 다음이 코드가 작동해야

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); 
     } 
    } 

, 모듈이 모두 정확히 동일로, 아직 그렇지 않습니다!

System.out.println(sem1ListModel); 
    System.out.println(moduleListModel); 

sem1ListModel : [소프트웨어 개발 1 [7 학점, ICT 관리 (1) [7 학점, DOA I [6 학점] 내가 출력 창에 모두 DefaultListModel를 인쇄 할 때 ,이 수 moduleListModel : [DOA I [6 학점, 소프트웨어 개발 1 [7 학점, ICT 관리 (1) [7 학점,자인 2 [5 학점, 소프트웨어 1 [5 학점]

당신이 할 수 소프트웨어 개발 1 [7 학점], ICT 관리 1 [7 학점], DOA I [6 학점] DefaultListModels에 있고 moduleListModel에서 삭제해야하는 3 개의 모듈입니다. 그러나 아직 발생하지 않습니다.

내가 뭘 잘못하고 있니?

+0

모델을 어떻게 채우고 있습니까? 그'Module's가 overriden equals이없는 다른 객체인지 궁금합니다. – Ordous

+0

공공 무효 LoadModules (ArrayList 모듈) { \t \t moduleListModel.clear(); (모듈 MOD : 모듈) 용 \t \t \t \t { \t \t \t moduleListModel.addElement (MOD); \t \t 모듈 ArrayList는 Module-objects로 채워진 ArrayList입니다. sem1ListMoel도 같은 방식으로 채워집니다. – Fluppe

+0

동일한 _toString() _ 구현 (로깅에 표시된 것처럼)을 사용하면 객체가 동일하지 않음을 기억하십시오. _mod1_ _quals (mod2) == true_를 가져야합니다. _Module_의 _equals() _ 메서드를 재정의하지 않은 경우 _mod1 == mod2_와 동일합니다. – schmop

답변

0

의견에 대한 답변을 드리겠습니다.

문제는 Module 개체가 실제로 다른 인스턴스이고, equals을 재정의하지 않았기 때문입니다. 즉, 덮어 쓰여진 toString을 통해 동일한 것을 인쇄 했더라도이 모델은 해당 모델을 별개의 객체로 처리하고 제거를 수행하지 않았습니다.

이 문제를 해결하는 표준 방법은 해시 데이터 구조를 사용하려는 경우에 equals (및 hashCode)을 재정의하는 것입니다.