# Richtige implimentierung eines CardLayout



## Decline (18. Okt 2010)

Ich hab jetzt ein bisschen im Internet danach gesucht, nur leider weiss ich nicht so richtig nach was ich eigentlich konkret suche 

Ich schreibe atm an einem eher kleinen Programm, das aus mehreren Ebenen besteht die via CardLayout übereinander angedordnet sind.
Jetzt kommt aber das Problem, da ich noch nie wirklich ernsthafte Programme geschrieben habe, habe ich das Problem das ich nicht weiss wie man das Programm Designtechnisch aufbaut. Nebenbei die IDE in der ich Programmiere ist Netbeans.
Soweit ich weiss ist es ja noch richtig das ich die einzelnen cards jeweils als eigene Klasse die von JPanel erbt anlege. Jetzt würde ich mich aber interessieren wo ich diese mit dem CardLayout verknüpfe.

Mir geht es dabei wohlgemerkt nicht um die Funktion des Programms, mir geht es nur darum das Programm Softwaredesigntechnisch richtig aufzubauen. Was mir sehr helfen würde währe eine kleine Open-Source Java Application bei der ich mir das mal anschauen könnte, danach hab ich zwar auch schon gesucht, aber meisst nur irgendwelche kleinen Beispiele gefunden, die zeigen wie man das CardLayout ansich verwendet.

Falls das ein bisschen verwirrend ist:
Ich hab also beispielsweise die Klassen:
class Card1 extends JPanel
class Card2 extends JPanel
class Card3 extends JPanel
class MainFrame  extends JFrame (beinhaltet das CardLayout)
class Main
und natürlich noch die Models der einzelnen Klassen

1) Brauche ich jetzt überhaupt noch eine eigene Main Klasse, weil es währe ja auch möglich die Methode main einfach in MainFrame zu implimentieren
2) Werden die einzelnen Cards in Main oder in MainFrame in das CardLayout eingefügt?


----------



## KrokoDiehl (18. Okt 2010)

Morgen.
Nutze doch eine Internet-Suchmaschine deiner Wahl um nach "Swing Tutorials" zu suchen. Da werden auch einige Layout-Manager (u.A. CardLayout) angesprochen. Oftmals gibt es in der API-Dokumentation von Java auch entsprechende Links zu solchen Tutorials.
Ein offizielles Tutorial gibt es hier. Wenn es natürlich allgemein darum geht, wie man GUI-Anwendungen aufbaut, tut es sicherlich gut, sich das MVC-Muster (Model-View-Controller) anzuschauen. Aber auch dazu gibt es genug Material im Internet und in diesem Forum.

Zu deinen Fragen:
- 1) Eine eigene Main-Klasse braucht man nicht unbedingt. Natürlich kann man die main-Methode auch in
 die Klasse mit dem Hauptfenster stecken. Das ist nicht unbedingt das Ordentlichste. Ich würde schon zu expliziten Starter-Klassen raten, auch wenn sie nur aus 
	
	
	
	





```
main()
```
 bestehen. Aber das ist Ansichtssache.
- 2) Im CardLayout-Tutorial wird das erklärt. Prinzipiell werden bei Swing alle Komponenten direkt am Container (zB Panel) hinzugefügt und je nach LayoutManager mit einem Informationsobjekt. Beim CardLayout wäre das der Identifikator für das jeweilige Card. Natürlich muss man vor der 
	
	
	
	





```
add()
```
-Orgie am Panel das Layout für das Panel setzen.


----------



## SlaterB (18. Okt 2010)

@Decline
das ist doch alles egal, wenn du willst kannst du auch ganz ohne Klassen arbeiten und alles in einer einzigen großen main-Methode definieren,
jede Art von Strukturierung ist in erster Linie genau dafür da, DIR das ganze zu erleichtern

dass du erkannt hast, welche Möglichkeiten es gibt und nun abwiegst, das eine oder das andere zu verwenden ist schon ein großer Teil des Weges den man gehen muss,
nun entscheide dich nur noch jeweils für eine der beiden Varianten, arbeite damit und ziehe deine Schlüsse ob das so ok ist oder eine andere Klassenaufteilung besser wäre,

eine pauschale Antwort gibt es nicht bzw. wenn es sein muss: grundsätzlich immer mehr Klassen als weniger


----------



## Decline (24. Okt 2010)

Ich hohl den Thread nochmal kurz hoch nachdem ich letztens keine Zeit zum antworten hatte.

@KrokoDiehl: Danke erstmal für die ausführliche Antwort, aber das was du geschrieben hast was mir bereits alles klar.Mein Problem ist eher ein Softwardesigntechnisches ; )

@SlaterB: Danke für diesen Beitrag.
Durch ihn wurde mir klar das ich mich mit Softwaredesign auseinandersetzen sollte, was für mich sozusagen das next Level darstellt.


----------

