Observer Pattern

Status
Nicht offen für weitere Antworten.

Mork0075

Aktives Mitglied
Code:
public class Main {
	
	public static void main(String[] args) {
		
		Countdown c = new Countdown();
		Gui window = new Gui(c);
		
		c.addObserver(window);
		
		
		
	
	}
}

Code:
public class Gui implements Observer {
	
	private  Label label_5;
	private  Label label_6;
	private Button button;
	private Countdown c;
	
	
	public Gui(Countdown c1){
		
		c = c1;
		open();
		
		
	}
	
	
	public void open() {
		final Display display = new Display();
		final Shell shell = new Shell();
		shell.setText("Die Eieruhr");
		shell.setSize(588,295);

		final Group group = new Group(shell, SWT.NONE);
		group.setText("Steuerung");
		group.setBounds(10, 40, 300, 145);

		final Label label = new Label(group, SWT.NONE);
		label.setBounds(10, 30, 230, 25);
		label.setText("Welche Konsistenz soll das Ei am Ende haben?");

		final Combo combo = new Combo(group, SWT.NONE);
		combo.setItems(new String[] { "FLÜSSIG", "MITTEL", "HART", "MANUELL" });
		combo.setBounds(10, 55, 160, 20);

		final Text text = new Text(group, SWT.BORDER | SWT.CENTER);
		text.setBounds(10, 95, 70, 25);

		final Label label_1 = new Label(group, SWT.NONE);
		label_1.setBounds(90, 100, 75, 15);
		label_1.setText("Minuten");

		final Group group_1 = new Group(shell, SWT.NONE);
		group_1.setText("Status");
		group_1.setBounds(10, 195, 560, 60);

		final Group group_2 = new Group(shell, SWT.NONE);
		group_2.setText("Verbleidende Zeit");
		group_2.setBounds(320, 40, 250, 70);

		final Label label_2 = new Label(group_2, SWT.NONE);
		label_2.setBounds(15, 35, 80, 25);
		label_2.setText("Abschrecken in:");

		final Label label_3 = new Label(group_2, SWT.NONE);
		label_3.setBounds(180, 35, 65, 25);
		label_3.setText("Minuten");

		final Label label_4 = new Label(group_2, SWT.NONE);
		label_4.setBounds(135, 35, 0, 25);
		label_4.setText(":");

		label_5 = new Label(group_2, SWT.NONE);
		label_5.setBounds(110, 35, 20, 20);
		label_5.setText("00");
		
		
		label_6 = new Label(group_2, SWT.NONE);
		label_6.setBounds(150, 35, 15, 20);
		label_6.setText("00");

		final Label label_7 = new Label(group_2, SWT.NONE);
		label_7.setBounds(135, 35, 10, 25);
		label_7.setText(":");

		

		final Button button = new Button(shell, SWT.NONE);
		button.addMouseListener(new MouseAdapter() {
			public void mouseDown(MouseEvent e) {
				
				c.countd(2,10);
			}
		});
		
		button.setBounds(320, 125, 250, 60);
		button.setText("Das Wasser kocht!");



		shell.open();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch())
				display.sleep();
		}}//end open
	
	
		
		public void setMins (String mins){
			label_5.setText(mins);}
		
		
		public void setSecs (String secs){
			label_6.setText(secs);
		}
		
		
		public void test (){
			label_5.setText("11");
		
		}
		
		public void update (Observable o, Object d){
			
			System.out.println(d);
			label_5.setText("10");
		
		}
		
	

}

Code:
public class Countdown extends Observable{
  
	private int minutes;
	private int seconds;
	
	
	public Countdown (){
		}
	
	public void countd (int mi, int se){
		
		minutes = mi;
    	seconds = se;
		
    	/*while(minutes!=0 && seconds!=0){
    		
    		try{Thread.sleep(1000);}
    		catch (InterruptedException e){}
    		seconds--;
    		
    		if(seconds==0){
    			seconds=59;
    			minutes--;}
    		notifyObservers(String.valueOf(minutes));
    	
    	}*/
    	//System.out.println("1");
    	setChanged();
    	notifyObservers("Das");
    	
	} }

Die Update Methode wird einfach nicht erreicht bzw aufgerufen. Wo liegt mein Fehler?
 

foobar

Top Contributor
Warum übergibst du nicht ein Referenz auf Gui an Countdown und setzt damit den Wert des Labels?
 

Mork0075

Aktives Mitglied
Weil mir das zu Einfach ist :D Nein mal im Ernst. Ich will das Mittels Observer Pattern realisieren - rein der Übung wegen.
 
B

bygones

Gast
seh jetzt nicht genau den Fehler.. aber allgemein:
Du willst das Observer Pattern verwenden (gut), aber dennoch speicherst du Countdown in der GUI ???? genau das soll das Observer Pattern verhindern... GUI und Model sollen sich nicht kennen !
 

Mork0075

Aktives Mitglied
Aber wie soll ich meine Countdown Methode aufrufen wenn ich den Button drücke wenn ich in GUI keine Instanz von Countdown habe?

P.S.: Bin nicht MVC Konform das weiß ich, mir kommts aber erstmal nur drauf an das das Observer funzt.

Danke :)
 
B

bygones

Gast
ah - seh ich jetzt erst... du verwechselst hier Ebenene. Das Observer Pattern regelt die einseitige kommunikation zwischen View und Model. Sobald du von der View aus Daten manipulierst musst du über eine andere Controller Ebene gehen !
 
B

bygones

Gast
leider kann ich deinen code nicht testen - da ich hier am rechner kein java hab...

generell:
Das Observer pattern wird dazu verwendet um die Kommunikation zwischen Model und View Ebene zu kontrollieren (gehört also zur Controller Ebene). Hierbei hat es aber eine Einschränkung: Es kennt nur die Richtung Model -> View, d.h. ändert sich etwas an den Daten benachrichtigt die Klasse die GUI und die zeigt änderungen an.

Wenn du eine zweiseitige Kommunikation haben willst - d.h. die GUI kann die Daten manipulieren und die geänderten Daten sollen in der GUI angezeigt werden - dann bringt dir das Observer Pattern nichts... da musst du dir deinen eigenen Controller schreiben (eine Klasse der beides kennt und die Kommunikation regelt).

Deine Countdown Klasse schaut aber nicht sehr nach Daten Klasse aus - sie speichert keine Daten - sie führt Aktionen aus -> wäre sie eine Controller Klasse. Das wiederum hieße, dass das Observer Pattern erst recht nicht sinnvoll ist (siehe oben) - und es eine assoziation zwischen GUI und Countdown geben darf
 

Mork0075

Aktives Mitglied
Ich fand mein Problem eigentlich perfekt für Observer

Ich hab die Countdown Klasse. Die zählt eine bestimmte Zeit runter. Bei jedem Schleifendurchlauf soll das GUI Element Label infoormiert werden, das sich sein Wert geändert hat und der Wert gesetzt werden soll. Wo müsste ich was ändern damit es nach Observer Pattern klappt?
 
B

bygones

Gast
auch wenn ich immer noch der Überzeugung bin dass der Observer hier nicht sinnvoll ist....

füge deinem button einen ActionListener nicht einen MouseListener hinzu - dann klappts
 

Mork0075

Aktives Mitglied
Das klappt aber nicht, da er mir dann einen Fehler anzeigt und zwar das ActionListener undefiniert für button ist. Wenn mich nicht alles irrt, dann funzt der ActionListener nur bei AWT Komponenten oder? Ich hab ja SWT

P.S.: Vielen Dank für deine Hilfe :) Wie würdest du das umsetzen? Da du meintest nicht mit Observer
 
B

bygones

Gast
kenn mich mit SWT nicht aus... habe es mit AWT bzw. Swing gemacht.

Da ich die Klasse Countdown als Controller Klasse sehe hätte ich keine Probleme dass die Klasse Countdown die Gui Klasse kennt und als Variable speichert. In der methode wird dann eine Methode der GUI aufgerufen die die aktualisierung macht.
 

Mork0075

Aktives Mitglied
Ok ich verabschiede mich mal vom Observer. Das klappt nicht so richtig. Ich hab es jetzt so gemacht wie du gesagt hast (GUI Als Referenz an Countdown übergeben)

Code:
final Button button = new Button(shell, SWT.NONE);
	      button.addMouseListener(new MouseAdapter() {
	      	public void mouseDown(MouseEvent e) {
	      		c.countd(2,10);
	      	}
	      });

In der GUI Klasse in der open() Methode rufe ich nun den Countdown auf. Allerdings blockiert die GUI so lange bis der Countdown abgelaufen ist. Ich kann mir auch vorstellen warum. Weil der Programm seinen Fluss aus der GUI Klasse in die Countdown Klasse verlässt und erst zurück kehrt wenn die Schleife in Countdown abgearbeitet ist. Aber wie kann ich das ändern?

Sobald ich während des Countdowns auf die GUI Klicke, steht oben "Programm reagiert nicht mehr".
 
Status
Nicht offen für weitere Antworten.
Ä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
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
Helgon Observer Pattern - hasChanged() immer false Java Basics - Anfänger-Themen 10
C OOP Observer Pattern Java Basics - Anfänger-Themen 2
K Observer Pattern notifyObservers Java Basics - Anfänger-Themen 9
W Observer-Pattern Java Basics - Anfänger-Themen 3
T Verständnisfrage Observer-Pattern Java Basics - Anfänger-Themen 8
S Observer Pattern notifyObserver Java Basics - Anfänger-Themen 6
A MVC Observer Pattern Java Basics - Anfänger-Themen 2
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
F Observer Java Basics - Anfänger-Themen 7
U observer thread safe Java Basics - Anfänger-Themen 4
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
O Observer - Einfach erklärt? Java Basics - Anfänger-Themen 5
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
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
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
G Observable/Observer update wird nicht ausgeführt Java Basics - Anfänger-Themen 9
D was ist der vorteil vom Builder-design pattern? Java Basics - Anfänger-Themen 11
W GoF-Pattern im Programmierer-Alltag Java Basics - Anfänger-Themen 113
D Java Pattern mit X Ausgabe Stern Java Basics - Anfänger-Themen 4
Dimax Erste Schritte Pattern.matcher,die Besonderheiten. Java Basics - Anfänger-Themen 12
N Best Practice Frage zum MVC-Pattern Java Basics - Anfänger-Themen 2
F Design pattern Java Basics - Anfänger-Themen 29
W RegEx Matcher + Pattern und Emails Java Basics - Anfänger-Themen 8
M Schlüsselworte Unterschied: String.matches und Pattern.compile Java Basics - Anfänger-Themen 2
C Best Practice JTable in MVC Pattern Java Basics - Anfänger-Themen 7
D Design Pattern Command Java Basics - Anfänger-Themen 3
Bregedur Methoden Matcher und Pattern bei sich wiederholenden Werten Java Basics - Anfänger-Themen 1
S Regex Pattern Java Basics - Anfänger-Themen 3
Z Pattern und Matcher substring zu String möglich? Java Basics - Anfänger-Themen 4
B Pattern für Email Liste Java Basics - Anfänger-Themen 3
J Builder Pattern implementieren Java Basics - Anfänger-Themen 3
Tarrew Proxy Design-Pattern Java Basics - Anfänger-Themen 1
M Methoden Pattern Matching Vokal Java Basics - Anfänger-Themen 2
agent47 Pattern split Java Basics - Anfänger-Themen 2
J MVC Pattern, mehrere Controller/Views/Models Java Basics - Anfänger-Themen 0
B Strategy Pattern - Rechner Java Basics - Anfänger-Themen 6
I Vertändnisfrage zu Prototype Pattern Java Basics - Anfänger-Themen 0
L Kompositum-Pattern Hilfe :O Java Basics - Anfänger-Themen 4
F eigenes Listener Pattern mit Interface Java Basics - Anfänger-Themen 1
S Je nach erhaltene Daten unterschiedlich reagieren (Design Pattern?) Java Basics - Anfänger-Themen 3
B Pattern Matching ohne Match-Methoden Java Basics - Anfänger-Themen 11
Furtano OOP Memento Pattern | übergabe einer Kopie des Arrays Java Basics - Anfänger-Themen 0
F Erste Schritte Pattern zum Zerlegen von selbstdefinierten Dateinamen Java Basics - Anfänger-Themen 7
M MVC + Strategy Pattern Ansatz (mit Code) Java Basics - Anfänger-Themen 5
A Design Pattern - Welche? Java Basics - Anfänger-Themen 33
Rudolf OOP Übungen zu Design Pattern in Java Java Basics - Anfänger-Themen 6
S OOP Regex Pattern Java Basics - Anfänger-Themen 2
P Grundsatzfrage zu Decorator-Pattern Java Basics - Anfänger-Themen 6
L Pattern Matching Java Basics - Anfänger-Themen 3
L RegExp bzw Pattern in Java Java Basics - Anfänger-Themen 6
R aktualisierung des View im MVC-Pattern Java Basics - Anfänger-Themen 5
M RegEx Pattern Matcher Java Basics - Anfänger-Themen 16
R Pattern bzw. Regex HTML-Code Java Basics - Anfänger-Themen 10
N Regexp Pattern & Matcher Problem Java Basics - Anfänger-Themen 4
I OOP Verständnisfrage zu Singelton Pattern Java Basics - Anfänger-Themen 21
R Welches Design pattern Java Basics - Anfänger-Themen 10
B static und Pattern matching Java Basics - Anfänger-Themen 22
T pattern klappt nicht so Java Basics - Anfänger-Themen 6
T Decorator Pattern Java Basics - Anfänger-Themen 7
A Pattern und Matcher Java Basics - Anfänger-Themen 9
T Frage zu Pattern/Matcher Java Basics - Anfänger-Themen 6
D Pattern in Midi-Sequencer Java Basics - Anfänger-Themen 2
V Frage zu Decorator-Pattern Java Basics - Anfänger-Themen 4
S OOP Factory Pattern Java Basics - Anfänger-Themen 2
M Regex-Pattern Java Basics - Anfänger-Themen 2
Haubitze_Broese Pattern für Links in RSS-Reader Java Basics - Anfänger-Themen 6
Raidri Pattern liefert false Java Basics - Anfänger-Themen 9
megachucky regex-Problem ( mit den Klassen Matcher / Pattern) --> XML prüfen Java Basics - Anfänger-Themen 11
O useDelimiter / Muster im Parameter (Pattern) Java Basics - Anfänger-Themen 6
S Problem mit Pattern Java Basics - Anfänger-Themen 2
S Pattern.matches mit Ignore Case Java Basics - Anfänger-Themen 2
N in int array einen pattern(eine zahl) finden Java Basics - Anfänger-Themen 21
A Hilfe zu Pattern Java Basics - Anfänger-Themen 2
Y Pattern Java Basics - Anfänger-Themen 2
A Proxy Pattern implementieren Java Basics - Anfänger-Themen 2
N OOP MVC Pattern Java Basics - Anfänger-Themen 3
G Probleme mit Pattern und Aussagenlogik Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben