2013-04-13 3 views
1

각 요소에 몇 가지 특수 데이터가있는 JList가 있습니다. 그래서 JList를위한 AbstractListModel을 구현했다.모델 (AbstractListModel)에서 모든 요소를 ​​제거한 후 JList를 업데이트하십시오.

목록에 하나 이상의 요소가있을 때 모든 것이 효과적입니다.

그러나, 아래의 시나리오에서 작동하지 않습니다

  • 의 JList는 이미 몇 가지 요소를 인스턴스화됩니다.
  • 목록에서 모든 요소를 ​​제거해야합니다.
  • 모델에서 액세스 할 수있는 JList 객체 (Component)가 없으므로 repaint()를 호출 할 수 없습니다.

OutOfIndexException을 throw하기 때문에 AbstractListModel의 ***() 메소드를 호출 할 수 없습니다.

제안 사항?

+0

''제안 사항? "'- 예, 디버깅을하여 코드가 예외를 throw하는 이유를 확인한 다음 오류를 수정하십시오. 내 마음에 진짜 질문은 왜 당신이 디버깅 실험 결과를 게시하지 않은 이유는 이것에 대한 답변이 모두 포함되어 있기 때문입니다. 우리가 너를 도울 수 있을지 의심하지 않는다. –

+0

fireContentsChanged (this, 0,0)를 호출하기 때문에 존재하지 않는 목록의 0 번째 요소를 찾습니다. 나는 원인을 알고 있지만 해결책은 모른다. – Mo3z

+1

요소를 제거 할 때 호출하는 방법이 잘못되었습니다. –

답변

3

당신의 상태 :

내가 fireContentsChanged를 호출하고 있기 때문에 (이, 0,0) ... 존재하지 않는 목록에서 0 번째 요소를 찾습니다. 나는 원인을 알고 있지만 해결책은 모른다.

항목을 제거 할 때 fireContentsChanged(...)으로 전화하지 마십시오. 대신 fireIntervalRemoved(...)으로 전화하십시오. 또한 제쳐두고이 상황에서는 repaint()으로 전화 할 필요가 없습니다. 모델의 상태를 변경하고 적절한 fireXXX(...) 메소드를 호출하여 모델의 리스너에 알리는 작업 만 수행하면됩니다.

+0

호버 크래프트에 감사드립니다. 확인하고 알려 드리겠습니다. 감사! – Mo3z