16.11.2013 Aufrufe

Programmieren in Java - HostFiXX.de

Programmieren in Java - HostFiXX.de

Programmieren in Java - HostFiXX.de

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>Programmieren</strong> <strong>in</strong> <strong>Java</strong><br />

3.4 Grafische Benutzeroberfläche mit Observable-Observer<br />

Das Zusammenwirken und die Kommunikation zwischen Awendung und grafischer<br />

Benutzeroberfläche sollte folgen<strong>de</strong>rmaßen gestaltet se<strong>in</strong>:<br />

- Anwendung und grafische Benutzeroberfläche sollen möglichst unabhängig vone<strong>in</strong>an<strong>de</strong>r se<strong>in</strong>, <strong>in</strong><br />

je<strong>de</strong>m Fall aber sauber vone<strong>in</strong>an<strong>de</strong>r getrennt se<strong>in</strong> (Anwendungsklasse, GUI-Klasse).<br />

- Je<strong>de</strong>s GUI-Objekt muß se<strong>in</strong>en Anwendungsfall kennen, um <strong>de</strong>sssen Metho<strong>de</strong>n aufrufen zu<br />

können<br />

- Eigentlich müßte umgekehrt je<strong>de</strong>s Anwendungsobjekt „se<strong>in</strong> GUI-Objekt“ kennen, z.B. zur Anzeige<br />

<strong>de</strong>r Anfangswerte<br />

- Das Hauptprogramm „<strong>de</strong>generiert“ zur Erzeugung e<strong>in</strong>es Anwendungs- und GUI-Objekts.<br />

Die Klasse Observable<br />

In <strong>Java</strong> muß das Interesse an e<strong>in</strong>em Objekt durch e<strong>in</strong>e eigene Klasse ausgedrückt<br />

wer<strong>de</strong>n. Die eigene Klasse muß von <strong>de</strong>r Klasse Observable abgeleitet se<strong>in</strong>. Die<br />

Observable-Klasse erlaubt es e<strong>in</strong>em Objekt, an<strong>de</strong>re Objekte zu <strong>in</strong>formieren, wenn es<br />

e<strong>in</strong>e Än<strong>de</strong>rung erfährt.<br />

public class java.util.Observable<br />

{<br />

Observable();<br />

public void addObserver(Observer o);<br />

public void <strong>de</strong>leteObserver(Observer o);<br />

public void <strong>de</strong>leteObservers();<br />

public <strong>in</strong>t countObservers);<br />

protected void setChanged();<br />

portected void clearChanged();<br />

public boolean hasChanged();<br />

public void notifyObservers();<br />

public void notifyObservers(Object arg);<br />

}<br />

Metho<strong>de</strong>n: Die wichtigsten Metho<strong>de</strong>n beim Erzeugen e<strong>in</strong>er Subklasse von<br />

Observable s<strong>in</strong>d „setChanged“ und „notifyObservers“. Die „setChanged“-<br />

Metho<strong>de</strong> markiert, daß Observable verän<strong>de</strong>rt wur<strong>de</strong>. Beim Aufruf von<br />

„notifyObservers“ wer<strong>de</strong>n die Observer benachrichtigt.<br />

protected void setChanged()<br />

setzt e<strong>in</strong> <strong>in</strong>ternes Flag für die Modifikation (wird von „notifyObservers“ verwen<strong>de</strong>t). Es wird<br />

automatisch gelöscht, wenn „notifyObservers“ aufgerufen wird, kann aber auch manuell mit <strong>de</strong>r<br />

„clearChanged“-Metho<strong>de</strong> gelöscht wer<strong>de</strong>n.<br />

protected void clearChanged()<br />

public void notifyObservers()<br />

prüft, ob das changed-Flag gesetzt wur<strong>de</strong>. Ist dies nicht <strong>de</strong>r Fall, kann ke<strong>in</strong>e Mitteilung über e<strong>in</strong>e<br />

Än<strong>de</strong>rung versen<strong>de</strong>t wer<strong>de</strong>n.<br />

public void notifyObservers(Object arg)<br />

Das Argument kann zur Übergabe zusätzlicher Information über die Modifikation dienen. Ohne<br />

Parameter entspricht <strong>de</strong>r Aufruf e<strong>in</strong>em Aufruf mit <strong>de</strong>m Argument Null.<br />

public boolean hasChanged()<br />

stellt fest, ob e<strong>in</strong> Objekt von Interesse modifiziert wur<strong>de</strong>.<br />

public void addObserver(Observer obs)<br />

252

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!