Observer

Fiction

Mitglied
Habe folgendes Problem:

Klasse1 hat ein JTextField dessen Feld immer aktualisiert werden muss wenn in Klasse 2 eine Änderung stattfindet.

Klasse2 übergibt an Klasse1 eine Variable X_Pos an JTextField wenn sich X_Pos ändert.

Dieses Problem lässt sich ja mit Observern lösen.
Ich habe noch nie mit Observern gearbeitet.

Wie müssen beide Klassen aussehen?
Mein Ansatz lautet:

Klasse1:

Java:
public class Klasse1 extends JFrame implements Observer {
 
 private JTextField M1_Abs_Pos;
 
    public Klasse1() {
 
     M1_Abs_Pos = new JTextField("");
     add(M1_Abs_Pos);
 
     class OhrenAuf implements Observer{
                 
        public void update(Observable o, Object arg) {
            M1_Abs_Pos.setText((String) arg);
            }
        }
    }   
}


Klasse2

Java:
public class Klasse2 {
 
    public Klasse2() {
 
        class Erzaehler extends Observable {        
            
            public Erzaehler(){
                this.addObserver(new OhrenAuf()); 
                erzaehl(X_Pos);
            } 
            
            public void erzaehl(String info){
                if(countObservers()>0){
                    setChanged();
                    notifyObservers(info);
                }
            }       
            
        }
    }
}

Aber irgendwie bekomme ich das nicht hin.
Wie sage ich in Klasse 2, dass:
this.addObserver(new OhrenAuf()); sich auf Klasse 1 bezieht?

Danke!
 
H

hüteüberhüte

Gast
In Klasse 2 findet eine Änderung statt, auf die Klasse 1 reagieren soll? Was hat das mit X_Pos zu tun? Diese Variable ist ja nirgendwo deklariert/definiert. Beschreibe bitte nochmal genauer, welche Klassen es gibt, welche Änderungen stattfinden und wie (und vor allem in welcher Klasse) darauf reagiert werden soll. Ansonsten würde ich mir wegen Observer (Interface) und Observable (Klasse) auch den Java Insel Link nochmal genauer durchlesen.
 

Fiction

Mitglied
Hallo,
sorry wenn ich einwenig undeutlich war:

Also:

In Klasse 1 ist eine Grafische Oberfläche definiert mit einem "+" Button und einem JTextField der den String Wert X_POS aus der Klasse 2 darstellt.


In Klasse 2 ist ein int X_POS_int und ein String X_POS definiert.

Wenn ich in Klasse 1 auf den "+" Button drücke, wird X_POS_int in Klasse 2 um den Wert 100 erhöht.
Danach wandle ich diesen Int Wert in einen String Wert um.
Jetzt möchte ich, dass dieser neue String Wert auf dem JTextField aus der Klasse 1 aktualsiert dargestellt wird. D.h. jedesmal, wenn ich auf den "+" Button aus Klasse 1 drücke, soll der neu berechnete X_POS Wert aus Klasse 2 auf dem JTextField der Klasse 1 erscheinen.



Ich habe mich schon eingelesen, werde aber nicht schlau daraus.

Danke, für die aufgewendetet Zeit und Antworten.
 

Michael...

Top Contributor
Vielleicht etwas übertrieben, aber m.M. passender wäre hier ein MVC. Wobei man hier View und Controller in einer Klasse implementieren könnte.

Bei Deinem Ansatz stellt sich die Frage, wo das Observable erzeugt wird? Am besten wäre eine Klasse die sowohl Observer, als auch Observable erzeugt und erstere letzteren zuweist.
 

Marc T.

Bekanntes Mitglied
Vielleicht etwas übertrieben, aber m.M. passender wäre hier ein MVC. Wobei man hier View und Controller in einer Klasse implementieren könnte.

Bei Deinem Ansatz stellt sich die Frage, wo das Observable erzeugt wird? Am besten wäre eine Klasse die sowohl Observer, als auch Observable erzeugt und erstere letzteren zuweist.

View und Controller in einer Klasse?
Dann ist das kein MVC mehr .... Ziel ist es doch genau das zu trennen, damit
du die einzelnen Elemente einfach so austauschen kannst ohne großartige
Anpassungen vorzunehmen.....

Grundsätzlich zum Observer.

Du hast ein Subject....das Subject hat grundsätzlich drei Methoden:

- Observer hinzufügen
- Observer entfernen
- Alle Observer informieren (notifyAll)

Zusätzlich solltest du Setter für die Daten haben, die im Subject
gesetzt sind und diese solltest du auch über die Observer ändern können.

Bsp:

Java:
public class Subject {
    ...
    public void setData(int data) {
        this.data = data;
        notifyAll(data);
    }
    ...
}

Das sorgt dafür, dass wenn ein Observer die Daten ändern muss!!!!
alle anderen Observer auch über die neuen Daten informiert werden.
Dem Observer muss natürlich das Subject bekannt sein.
 

Michael...

Top Contributor
View und Controller in einer Klasse?
Dann ist das kein MVC mehr .... Ziel ist es doch genau das zu trennen, damit
du die einzelnen Elemente einfach so austauschen kannst ohne großartige
Anpassungen vorzunehmen.....
Das wäre m.M. für diesen Fall zu übertrieben. Davon abgesehen sind die Controller i.d.R recht View spezifisch und in der (mir bekannten) Realität oft auch direkt auf die View zu geschnitzt, so dass mit der View auch gleich den Controller austauscht.

Das Problem scheint ja nicht das fehlende Verständnis des Observer Pattern zu sein, es ist ja korrekt implementiert. Das Problem des TO ist es ja den Observer am Observable zu registrieren - was eher auf ein grundlegendes Verständnis der OOP hindeutet.
 

Marc T.

Bekanntes Mitglied
Hmmm.... könnte sein, ich weiß leider nicht genau wo dein (@Fiction) Problem liegt.

Dein Button "+" (also der listener) wäre auf das Observer-Pattern bezogen deine update-Methode,
das heißt in ihr musst du die veränderten Daten neu setzen.

Deine Klasse2 ist also der Observer, in dem der Wert von x-pos wie du sagtest
um 100 erhöht wird. Diese Klasse2 muss also im Observerable registriert sein.

- Deine Klasse1 erbt also von Observerable
- Deine Observer müssen mit der Methode: addObserver(Observer o) regestriert werden.
Hierfür muss deine Klasse2 natürlich die Klasse1 kennen (Komposition in UML-Sprache)
damit du Klasse1.addObserver(Observer o) aufrufen kannst.
- Wenn sich nun was verendert musst du in der Klasse1 (Mit deinem Listener für den Button +)
die Methode notifyObservers() aufrufen.

Bin ich so in der richtigen Richtung oder brauchst du was anderes?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Methoden Observer-Pattern mit Consumer und accept( ) Java Basics - Anfänger-Themen 6
J Implementierung von Observer und Singleton-Pattern Java Basics - Anfänger-Themen 9
fLooojava MVC Pattern und Observer Pattern Java Basics - Anfänger-Themen 6
Y Observer update Java Basics - Anfänger-Themen 3
N Observer funktioniert nicht Java Basics - Anfänger-Themen 13
G Observer löst zweimal aus Java Basics - Anfänger-Themen 8
A ein observer "post"problem Java Basics - Anfänger-Themen 3
A Observer Pattern Problem Java Basics - Anfänger-Themen 15
J Interface Frage zu Interfces am Beispiel Observer Pattern Java Basics - Anfänger-Themen 8
U observer thread safe Java Basics - Anfänger-Themen 4
Helgon Observer Pattern - hasChanged() immer false Java Basics - Anfänger-Themen 10
B Wozu Observer? Java Basics - Anfänger-Themen 9
Spin Observer Patteern java Java Basics - Anfänger-Themen 7
O Liste - Observer/Observeable - HashMap Hilfe Java Basics - Anfänger-Themen 19
C OOP Observer Pattern Java Basics - Anfänger-Themen 2
O Observer - Einfach erklärt? Java Basics - Anfänger-Themen 5
K Observer Pattern notifyObservers Java Basics - Anfänger-Themen 9
P Fragen zum Observer Muster und Datenbanken Java Basics - Anfänger-Themen 2
T Observer ansprechen Java Basics - Anfänger-Themen 2
R Observer funktioniert nicht. Sehe keine Fehler Java Basics - Anfänger-Themen 2
W Observer-Pattern Java Basics - Anfänger-Themen 3
hdi JList mit Model und Observer -> Chaos, blicke nicht durch Java Basics - Anfänger-Themen 22
hdi Observer als statische Klasse ? Java Basics - Anfänger-Themen 2
N observer frage Java Basics - Anfänger-Themen 2
G Implementierung des Observer/Observable Patterns - Gut so? Java Basics - Anfänger-Themen 3
N observer Java Basics - Anfänger-Themen 12
H [erledigt] Observable/Observer Beobachter entfernen Java Basics - Anfänger-Themen 2
G Unterschied Observer&Observable<->java.beans.Prope Java Basics - Anfänger-Themen 4
G Benötige Hilfe bei Problem mit Observer! Java Basics - Anfänger-Themen 2
E Observer Java Basics - Anfänger-Themen 7
K Observer Observable update() . Java Basics - Anfänger-Themen 13
T Verständnisfrage Observer-Pattern Java Basics - Anfänger-Themen 8
Y Observer - notifyObservers(Object arg) Java Basics - Anfänger-Themen 4
M Servlets und Observer Java Basics - Anfänger-Themen 2
G Observable/Observer-Patterns Java Basics - Anfänger-Themen 9
S Observer Pattern notifyObserver Java Basics - Anfänger-Themen 6
M Observer Pattern Java Basics - Anfänger-Themen 14
A MVC Observer Pattern Java Basics - Anfänger-Themen 2
G Observable/Observer update wird nicht ausgeführt Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben