# Richtiges Vorgehen bei GUI-Programmierung



## Shuk (27. Apr 2006)

Hallo zusammen,

ich hoffe diese Frage wurde nicht schon zu oft gestellt, aber ich weiß irgendwie nicht, wonach ich genau suchen soll.

Und zwar möchte ich gerne anfangen mit Swing eine GUI zu programmieren und damit ich von vornerein gleich richtig vorgehe, würde ich gerne wissen, ob es da irgendwelche "Standardvorgehen" gibt. Vielleicht auch eine gute Seite mit einem Tutorial oder Programmbeispielen. 
Mir geht es dabei nicht darum, wie ich jetzt einen JFrame anlege oder dort einen Button einfüge. Hello World kriege ich also schon gut hin   - die Grundprogrammierung kann ich also schon.

Aber wie geht man z.B. vor, wenn man den Inhalt eines Bereiches im Frame ändern will? Ruft man dann eine Methode auf, welche die bestehenden Elemente versteckt und die neuen dafür einblendet? Oder blendet man den ganzen Frame aus und blendet einen neuen ein? 

Also wie programmiere ich am besten, wenn ich wechselnde Inhalte habe?

Bin für alle Antworten dankbar!


----------



## math66 (27. Apr 2006)

hallo, also es empfiehlt sich immer, das MVC pattern zu nutzen. das steht für MODEL VIEW CONTROL (seeheim modell). man unterteilt eine software also in 3 komponentenarten. die viewkomponenten, was die sichtbare gui ist, dann einen oder mehrere gui controll und das model, was dann die anwendungslogik ist. drückt man jetzt auf einen button in der gui, dann wird der guicontroller aufgerufen, welcher sich dann an das model wendet. ein beispiel: 

_man sucht einen nutzer, der in ein jtextfield eingegeben wurde:_

1. in der actionperformed methode des buttons ruft man den guicontroller auf



```
ArrayList<String> result=guiController.search(textFeld.getText());
```


2. der guicotroller wendet sich an das modell


```
//am besten ein facade verwenden, die dann das modell kapselt und so eine schmale schnittstelle für alle zugriffe liefert
//man nach facade design pattern suchen
ArrayList<String>=facade.search(name);
```


3. die facade ruft dann die passende methode im modell auf und liest das aus der datenbank oder sonstwoher und gibt wieder was zurück

4. der guicontroller hat jetzt alle daten einer person in einer arrayliste vorliegen....die kann er nun in ein neues fenster packen und anzeigen.


es empfiehlt sich halt immer, anwendungslogik von der gui fernzuhalten.

viele grüße


----------



## math66 (27. Apr 2006)

war nicht ganz richtig, unter 1. muss es heissen:


```
guiController.search(....);
```

der guicontroller bekommt ja die arraylist und macht dann was damit, und nicht die gui. 

der vorteil daran ist, dass die gui fast komplett von der logik entkoppelt ist und der controller ausgetauscht werden kann, das ist GUUUUUUT!


hoffe, das war nicht zu viel für den anfang :-|


----------



## Shuk (27. Apr 2006)

Hi, danke für die Anwort. MVC sagt mir schon was und danach werde ich dann wohl auch vorgehen. 
Was mit jetzt nur noch unklar ist, wie man überhaupt am besten umsetzt, die unterschiedlichen GUI-Komponenten anzuzeigen bzw. auszutauschen. Angenommen ich möchte eine Art Wizard machen, wo man immer im aktuellen Fenster ein paar Komponenten hat und anschließend auf "weiter" klickt. Dann ändert sich das Bild und es stehen anderen Komponenten im Frame. Blendet man da dann einfach die "alten" Komponenten aus (setVisible(false)) oder wie geht man da am sinnvollsten vor?

Und noch eine kleine Frage zu den unterschiedlichen Layout Managern. Sehe ich das richtig, dass man diese immer miteinander schachtelt (also auf die in einem Layout eingebundenen Komponenten wieder neue Layouts setzt), um das gewünschte Anzeigeergebnis zu erhalten? Oder gibt es hier eine elegantere Methode?


----------



## foobar (27. Apr 2006)

Mach dir doch eine Guikomponente die als Container für Wizards agiert. Der Container hat nur ein paar Buttons wir vor, zurück, abbrechen etc. Bei Klick auf einen der Buttons wird dann ein anderes Panel in den Container geladen.
P.S. Es gibt von JGoodies ein Framework für Wizards.


----------



## Shuk (27. Apr 2006)

Hi foobar,

ja so hatte ich mir das auch vorgestellt, war mir aber nicht sicher, ob das die gängige Vorgehensweise ist. Aber da man es anscheinend durchaus so machen kann, werd ich es dann mal so probieren.
Das Framework werde ich mir auch mal anschaue, danke für den Hinweis!

Danke für alle Anworten soweit!


----------



## foobar (28. Apr 2006)

> ja so hatte ich mir das auch vorgestellt, war mir aber nicht sicher, ob das die gängige Vorgehensweise ist. Aber da man es anscheinend durchaus so machen kann, werd ich es dann mal so probieren.


Es spielt doch keine Rolle ob das gängig ist oder nicht. Wenn jeder nur noch das macht was als gängig oder normal gilt, gibt es überhaupt keinen Fortschritt mehr. Mach es einfach so wie es für dich richtig erscheint und wenn es dann nicht funktioniert oder du nicht weiter kommst kannst du immer noch nachfragen. 

Viele Grüße
foobar


----------



## Leroy42 (28. Apr 2006)

foobar hat gesagt.:
			
		

> Wenn jeder nur noch das macht was als gängig oder normal gilt, gibt es überhaupt keinen Fortschritt mehr.



Richtig! Aber das kann man auch genau anders herum sehen. 

Wenn jeder versucht das Rad neu zu erfinden, und sich mit der Überwindung von, schon 
innerhalb von Jahrzehnten ausgemerzten Fehl-Denkansätzen, herumplagen muß, wann
bitte schön, findet er dann endlich die Zeit, etwas zum Fortschitt beitragen zu können.   

Zugegeben etwas überspitzt formuliert, aber ich denke man sollte in beiden Richtungen
_offen bleiben_.


----------

