# Zugriff auf Oberfläche bzw Trennung GUI / Logik



## Fraiser (14. Feb 2007)

Hallo zusammen

Ich habe mal wieder ein paar Fragen:

1. Ich habe mir eine GUI gebastelt mit mehreren Panels mit: "extends JPanel implements ActionListener"
Vorteil ist hier natürich, dass ich auf alle Elemente des Panels zugriff habe. (unteranderem Buttons, Checkboxes, Textfields). 
Die Aktionen werden mit set/getActionCommand unterschieden.
Nun würde ich gerne der Actions in eine eigene Klasse packen. (extends ActionListener)
Hier hab ich nun das Problem, das wenn ich z.B. auf einen Button reagiere mit getSource zwar den Button holen kann, jedoch fehlt mir der Zugriff auf die anderen Elemente (z.B. Textfields) was ich aber brauche.

Wie kann ich das am besten machen?


2. Weiterhin erzeugt meine GUI einen Thread als Listener in einer Endlosschleife. Dieser Thread soll aber Rückmeldungen an die GUI liefern. Genauer gesagt Werte in ein JTextfield schreiben. Bisher hab geb ich dem Thread das JPanel mit, in dem sich das Textfeld befindet. Über eine Methode greif ich dann auf das Textfeld zu und schreib den Wert.

Hat jemand ne andere Variante? So ganz praktisch find ich das nicht


----------



## WieselAc (14. Feb 2007)

Zu 1) Du musst der Listenerklasse im Konstruktor das Panel mit übergeben und es lokal vorhalten. ZUsätzlich musst du dir für deine lokalen ElementeGetter- oder andere Zugriffsmethoden definieren. Kommt wie immer etwas auf den Fall an.

Aber prinzipiell übergibst du der Action-Klasse auch immer das Objekt zu der sie gehört. So kannst du dann in der Action auf diesem Objekt die Aktionen ausführen. Bei verzweigteren Abhängigkeiten wird das ganze etwas komplexer, funktioniert aber genauso.

Zu 2) Bin ich mir nicht sicher aber ein Stichwort wäre vielleicht Observer


----------



## Fraiser (15. Feb 2007)

WieselAc hat gesagt.:
			
		

> ... Zu 2) Bin ich mir nicht sicher aber ein Stichwort wäre vielleicht Observer



Da der Thread der "Erzähler" ist müsste dieser also als von Observable erben, was aber nicht  geht, weil Java ja keine Doppelvererbung zulässt. (extends Thread,Observable).

Hätte noch jemand eine Idee?


----------



## Laui (16. Feb 2007)

```
extends Thread
```
 kannst Du ersetzen durch 
	
	
	
	





```
implements Runnable
```
[/code]


----------

