bin gerade dabei ein Memory Spiel zu erstellen. Ich mache das Ganze mit Netbeans.
An für sich ist es ja nicht schwierig die Labels (für die Karten) individuell (also "Free Layout") zu positionieren. Dennoch bietet Java den Layout Manager an, den ich eigentlich auch nutzen möchte. Allerdings habe ich mit allen Layouts eine Weile herum probiert, aber kein geeignetes für ein Memory Spiel gefunden. Vielleicht weiß ich sie auch nicht richtig einzustellen.
1. Hat jemand einen Vorschlag für ein Layout passend für ein Memory Spiel? Die einzige Anforderung ist das die Karten-Labels im selben Abstand zu einander in ein viereckiges Feld angeordnet werden.
Welche Einstellungen am Layout muss man noch vornehmen?
2. Man kann die Labels auf dem eigentlichen Frame ablegen oder auf dem Frame ein Panel setzen und dort hinein setzen. Welche Methode sollte man verwenden? Labels auf Frame oder Labels auf Panel?
Guck dir mal Forms Layout von JGoodies an. Ist sehr einfach zu konfigurieren. Für solche "Dialog" Layouts in Tabellen ähnlicher Form gibts imho kein besseres.
Für dein Vorhaben würde ich ein Gridlayout verwenden, da Memory ja in ein Raster unterteilt ist kannst du dem Gridlayout gleich die gegebenen Spalten und Zeilen zuweisen. Da der JFrame bei der Initialisierung das Borderlayout benutzt, kannst du im Bereich der Konstante Borderlayout.SOUTH ein weiteres JPanel für die Ablage der Labels einfügen und das Gridlayout dementsprechend ins Borderlayout.CENTER des JFrames.
Im Klartext:
JFrame.add(Rasterpanel, BorderLayout.CENTER) - Das Rasterpanel benutzt ein GridLayout.
JFrame.add(Ablagepanel, BorderLayout.SOUTH) - Da bei Memory immer 2 Karten abgelegt werden kannst du auch hier ein GridLayout benutzen
Auf ein Panel. Und DAS hat dann ein GridLayout, vielleicht auch gleich ein
new GridLayout(x,y, abstandX, abstandY)
für einen Abstand zwischen den Karten.
Das Panel würde dann im BorderLayout.CENTER vom ContentPane des Frames liegen, und im BorderLayout.SOUTH (oder so) dann weitere (Control-) Panels mit buttons usw.
Weil ein JFrame nicht wirklich ein Container für Komponente ist sondern mehr ein Fenster, welches Container aufnimmt. Durch die Benutzung von Panels kannst du z.B. jedem Panel ein anderes spezifisches Layout zuweisen, so kannst du deine Anwendung optimal gestalten. Der JFrame kann nur 1 Layout annehmen.
Abgesehen davon, dass das direkte Erzeugen einer GUI in einem JFrame dich deiner Flexibilität beraubt:
Nehmen wir mal an, du möchtest bspw. dein Soiel irgendwann mal als Applet im Internet anbieten.
Dann wird dir das mehr Arbeit und Schwierigkeiten bereiten, als wenn du die GUI in einem Panel zusammenführst. Mit einem Panel erzeugst du eine Instanz vom Panel und setzt es in eine Applet-Klasse. Und schon bist du fertig...
...nach dem du das Laden von Bildern und Sounds angepasst hast.