hallo,
Ich versuch mich gerade an Modell View Control- Design bzw. an dem Observer-Pattern.
Das funktioniert so weit wunder bar wenn ich nur einen Observer angemeldet habe. Wenn ich mit zwei Arbeit aber nicht mehr.
Leider ist es so das beide Observer auch bei notifyObservers reagieren egal in welcher Methode
und dann natrürlich auf ein Objekt bekommen das sie nicht verarbeiten können und sollen!
In einem Controller wird das Modell aufgerufen um neue Werte zu bekommen:
Ich weiss nicht wie ich den Oberver Objekten Klar machen soll das sie nur das eine Attribut im Modell beobachten sollen und entsprechen updaten. Weil notifyObservers( object ); unabhängig dem Argumenttyp auf beide Observer feuert.
Viele Grüsse munuel
Ich versuch mich gerade an Modell View Control- Design bzw. an dem Observer-Pattern.
Das funktioniert so weit wunder bar wenn ich nur einen Observer angemeldet habe. Wenn ich mit zwei Arbeit aber nicht mehr.
Code:
public class Modell extends Observable {
private JTextArea _textArea;
private Reader _reader;
void setTextArea(JTextArea textArea ){ // Hier rauf soll mein erster Observer reagieren
_textArea = textArea;
setChanged();
notifyObservers(_textArea);
}
void setReader (Reader reader){ // Hier soll der zweite Observer reagieren
_reader = reader;
setChanged();
notifyObservers(_reader);
}
}
Leider ist es so das beide Observer auch bei notifyObservers reagieren egal in welcher Methode
und dann natrürlich auf ein Objekt bekommen das sie nicht verarbeiten können und sollen!
Code:
public class ObservReader implements Observer { //2.Observer
private Reader _reader;
public ObservReader(Modell modell) {
_reader = new StringReader("!init");
modell.addObserver(ObservReader.this);
}
public void update(Observable obs, Object v){ //Wenn er hier ein JTextArea bekommt Knalls !
_reader = (Reader) v;
System.out.println("Verändert Text Area");
}
public Reader getReader(){
return _reader;
}
}
Code:
public class ViewDatei extends JInternalFrame implements Observer //2. Observer
{
....
public void update (Observable obs, Object v){ // Hier knallts wenn er einen Reader bekommt
_jTextArea = (JTextArea) v;
int test = _jTextArea.getLineCount();
_scroller.getViewport().add(_jTextArea);
_content.add(_scroller);
System.out.println("Verändert Text Area");
}
}
In einem Controller wird das Modell aufgerufen um neue Werte zu bekommen:
Code:
_modell.setTextArea(_jTextArea);
_modell.setReader(reader);
Ich weiss nicht wie ich den Oberver Objekten Klar machen soll das sie nur das eine Attribut im Modell beobachten sollen und entsprechen updaten. Weil notifyObservers( object ); unabhängig dem Argumenttyp auf beide Observer feuert.
Viele Grüsse munuel