# Trennung von Programm und Oberfläche



## digger (8. Feb 2004)

Hey zusammen, 
Kann mir jemand ein vernünftiges Modell sagen, wie man konsequent den Code für das Programmieren der Logik hinter der Oberfläche und dem eigentlichen Programm trennt, wie man verschiedene Listener einbindet - also einer, der bspweise auf Tastendruck reagiert und einer der bei Drücken eines Buttons aktiv wird. Wie sieht das Zusammenspiel aus. 
Weiter möchte ich gerne einen Editor, der mir das Oberflächenbauen übernimmt, dass ich nicht alle Buttons und Extflächen von Hand programmieren muss. gibt es da was vernünftiges (kostenloses)? 
Liebe Grüße und herzlichst danke! 
sam


----------



## bygones (8. Feb 2004)

also das mit dem Trennen ist so eine Sache. Am Bsp. von listener. Ich mache es immer so, dass sobald ein listener komplexere Aufgaben zu lösen hat als nur bei "drücken der ESC taste" schließen ich eine eigene Klasse verwende. Aber z.B. eine eigene ActionListener Klasse zu schreiben habe ich noch nie gemacht.

Ich würde eher GUI und Listener zusammenpacken und falls irgendwelche Algorithmen verwendet werden, die nichts mit einer GUI zu tun haben, die rausziehen und mögl. über eine Adapterklasse mit der GUI verbinden (glaube nicht, dass es da ein einheitliches Modell gibt)

Wegen dem GUI - Editor. Ich kann für Eclipse sprechen - da gibt es einige plugins die das tun können (auch free) - schau mal unter http://www.eclipse-plugins.info/eclipse (manche sind glaub ich sogar auch als standalone zu verwenden).

Ich persönlich würde diese aber nur zum testen hernehmen, da die Code generierung meiner Ansicht nach nicht wirklich schönen bzw. guten Code produziert (z.B: für jeden Button einen eigenen actionperformed methode...)


----------



## robmann (10. Feb 2004)

hallo digger,
zum "trennen von GUI und anwendungslogik" gibt es im buch "Go to Java" ein beispiel
http://gd.tuwien.ac.at/languages/java/GoToJava2/html/k100177.html#mediatorinjava 
vorraussetzung ist, dass ereignisort und ergebnisort übereinstimmen. die schlüssel-
methode ist         
	
	
	
	





```
Frame source = (Frame)event.[b]getSource()[/b];
```

interessant wird es erst, wenn der ereignisort und der ergebnisort nicht übereinstimmen.
eine möglichkeit ist die vererbung des ergebnisortes an den ereignisort.

der teufel steckt aber wie immer im detail. und manche dinge habe ich selbst noch
nicht geblickt. sollte sich jemand mit dieser materie auskennen, lerne ich auch gerne 
dazu.
gruss robmann


----------



## odysseus (10. Feb 2004)

http://www.java-forum.org/de/viewto...0&postdays=0&postorder=asc&highlight=trennung

ich hab sowas auch schon mal gepostet.
inzwischen hats bei mir geklappt und die anwendung ist schön strukturiert und leicht erweiterbar.

- Command <= enthält Logik und steuert
- Eventhandling <= reagiert auf alle events
- Gui <= die oberfläche
- Start <= startet die anwendung

*
Start:*


```
Command cmd= new Command();		
//EventHandling starten
EventHandling eh = new EventHandling(cmd);
```

*Konstruktor von Command:*


```
public Command() { //konstruktor
		gui = new ClientGui(this);
		}
```

ja, das wars mal grob...

ps:
das beispiel aus dem gotojava finde ich ziemlich schlecht. er trennt zwar gui und logik, schränkt dabei aber die logik total ein...


----------

