2014-04-24 1 views
0

메인 메뉴 (일부 버튼)를 표시하는 데 사용되는 JFrame에서 클래스 "A"가 확장되었습니다.자바 옵저버 자체를 삭제 하시겠습니까?

다른 클래스 "B"가 프로젝트의 데이터가 포함 된 Observable에서 확장되었습니다.

"A"에서 "B"개체를 만들었습니다. b. "A"에는 버튼이 있습니다.이 버튼을 클릭하면 JFrame (및 Observer 구현)에서 확장 된 새 클래스 "C"가 만들어지고 표시됩니다.

이 단추를 클릭하면이 새 프레임 "C"가 b.addObserver (c)를 사용하여 "B"의 옵저버로 추가됩니다.

이제 내 질문 : 새 프레임 "C"를 닫으면 -> 어떻게 Observerlist에서 자체를 제거 할 수 있습니까? A에서 관찰자 beeing 에서이 프레임을 제거 할 수 있습니까? 는 인터넷에서 뭔가를 찾을 수 없습니다 :/

감사

다니엘

답변

0

가 그 Observerlist에서 자신을 제거 할 수 있습니까?

관찰자를 삭제할 필요가 없다고 생각합니다. 이제 관찰자가 이벤트를 게시하지 않지만 아래 코드와 같이 제거 할 수 있기 때문입니다.


  • 은 때마다 당신은 ObserverC 객체가 ObservableB을 통과 만들 수 있도록 ObservableB 캔 관찰자 그것은 그. ObserverC이 닫힐 때

  • 이제 다음 바로 ObservableB

주에서 관찰자를 삭제 : 인라인 주석을 읽습니다.

샘플 코드

class JFrameA extends JFrame { 
    ObservableB b; 

    public void add() { 
     ObserverC c = new ObserverC(b); 
    } 
} 

class ObservableB extends Observable { 

} 

class ObserverC extends JFrame implements Observer { 

    public ObserverC(final Observable observable) { 
     // observer is added 
     observable.addObserver(this); 

     this.addWindowListener(new WindowAdapter() { 

      @Override 
      public void windowClosed(WindowEvent arg0) { 
       // observer is deleted 
       observable.deleteObserver(ObserverC.this); 
      } 
     }); 
    } 

    @Override 
    public void update(Observable arg0, Object arg1) { 
     ... 
    } 
} 
+0

작품 : 큰 D. 감사합니다. – Daniel0b1b

관련 문제