Question

I have a class "A" extends from a JFrame, used for showing a main menue (some buttons).

I have another class "B" extends from an Observable, which contains data for a project.

In "A" i created an object "B" b. In "A" i also have a button, when i click on this button a new class "C" also extends from a JFrame (AND implemented an Observer) is created and visible.

In A, when i click on this button, also this new frame "C" is added as an Observer to "B" with b.addObserver(c);

Now my question: When i close the new frame "C" -> how can i remove this frame from beeing an observer in A. Can it remove itself from that Observerlist? Can't find something on the internet :/

Thanks

Daniel

Was it helpful?

Solution

Can it remove itself from that Observerlist?

I think there is no need of deleting the observer because now observer will never publish any event but still you can remove it as shown in below code.


  • Whenever you create a ObserverC object pass the ObservableB so that ObservableB can observer it.

  • Now when ObserverC is closed then just delete the observer from the ObservableB

Note: Read inline comments.

Sample code

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) {
        ...
    }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top