# Observer und GUI Update



## Passe (23. Apr 2010)

Tachchen,
ist mein erster Beitrag also bitte nicht so hart 
ich soll 2 Guis erstellen die sich Textfelder automatisch hin und her übergeben.
Also wenn ich in die erste GUI "Hallo" eintrage, soll in die zweite GUI beim absenden das gleiche stehen.

Hier mal mein Quellcode:
GUI.java

```
package opattern;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Observable;
import java.util.Observer;

import javax.swing.*;


public class GUI implements Observer, ActionListener{
	public static void main(String[] args){	
		new GUI();
		new GUI();
	}
	

	public String name;
	public String adresse;
	public JTextField kundetf = new JTextField(20);
	public JTextField adressetf = new JTextField(20);
	
	public GUI(){
		JFrame f = new JFrame("GUI");
		JButton send = new JButton("Senden"); 
		f.setSize(800,100);
		Container content = f.getContentPane();
		content.setBackground(Color.gray);
		content.setLayout(new FlowLayout());
		content.add(new JLabel("Kunde: "));
		content.add(kundetf);
		kundetf.setText("Droesel");
		content.add(new JLabel("Adresse: "));
		content.add(adressetf);
		adressetf.setText("Beispielweg");
		content.add(send);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setVisible(true);
		Kunde k1 = new Kunde(kundetf.getText(), adressetf.getText());
		send.addActionListener(this);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		setzeKunde(this.kundetf.getText(), adressetf.getText());
	}
	
	public void setzeKunde (String name, String adresse){
		this.name = name;
		this.adresse = adresse;
		Kunde k1 = new Kunde(name, adresse);
		System.out.println(Kunde.getName());
		System.out.println(Kunde.getAdresse());
		Ding d = new Ding();
		GUI g = new GUI();
		d.addObserver(g);
		g.update(d, kundetf.getText());
	}

	String updatewert;
	@Override
	public void update (Observable o, Object str){
		System.out.println("Beobachter Name Update: " + str.toString());
		updatewert = str.toString();
	}//update
}
```
Ding.java

```
package opattern;

import java.util.Observable;

public class Ding extends Observable{

	public void setValue (){
		setChanged(); // set changed flag
		this.notifyObservers(); // do notification
	}//setValue
}//class
```
Kann ich irgendwie die GUIs updaten? bin nicht so fortgeschritten in Java, ist aber für die UNI wichtig.


----------



## Noctarius (23. Apr 2010)

SwingUtils.invokeLater und dann halt innerhalb des Runnable.run den Wert im Textfeld setzen


----------



## Michael... (23. Apr 2010)

Du erzeugst beim Absenden immer ein neues Objekt vom Typ GUI.

Wenn Du von Senden sprichst redest Du jetzt nicht vom Senden über Netzwerk, sondern von einem einfachen Übergeben des Textes?

Einfachste Möglichkeit beide besitzen eine Referenz aufeinander.
Wenn's mit Observer Konzept gemacht werden soll, dann muss GUI sowohl Observer als auch Observerable sein und müssen gegenseitig als Observer registriert sein. Wobei das schon ein etwas merkwürdiges Konstrukt ist!?!


----------

