Probleme mit BoxLayout

Ich habe ein Problem mit BoxLayouts.

Unten stehendes Codestück erzeugt ein Fenster, das geschachtelte Boxen fürs Layout verwendet.
Wenn die Box „teamAnwesendBox“ nicht der Box „schritt0“ hinzugefügt wird, sieht alles so aus, wie es soll, bis auf einige fehlende Elemente. Füge ich die teamAnwesendBox aber bei schritt0 hinzu, verschiebt sich alles nach rechts, so dass am linken Rand ein riesiger leerer Rand entsteht. Nehme ich die Zeile 22 raus (teamAnwesendBox.add(new Box.Filler(…))), dann entfällt der leere Rand, aber die Checkboxen aus teamAnwesendBox sind dann am linken Rand, wobei die Checkboxen in schritt0 weiter rechts sind.

Kann mir da irgend jemand helfen?

—Code—

import javax.swing.\*;
import java.awt.\*;

public class test extends JFrame {

 public test() {
 Box boxKomplett = new Box(BoxLayout.X\_AXIS);
 boxKomplett.add(new Box.Filler(new Dimension(5, 0), new Dimension(20, 0), new Dimension(50, 0)));
 JPanel links = new JPanel(new CardLayout());
 Box schritt0 = new Box(BoxLayout.Y\_AXIS);
 schritt0.add(new Box.Filler(new Dimension(0, 5), new Dimension(0, 20), new Dimension(0, 50)));
 JLabel überschrift = new JLabel("Schritt0Überschrift");
 schritt0.add(überschrift);
 schritt0.add(new Box.Filler(new Dimension(0, 5), new Dimension(0, 20), new Dimension(0, 50)));
 JCheckBox[] teamAnwesend = new JCheckBox[2];
 JCheckBox[][] personAnwesend = new JCheckBox[2][];
 for (int a=0; a
---Code Ende---

Danke,

Sebastian.

Hi Sebastian,

ich gebe dir folgenden Rat:
Verwende das BoxLayout nicht für solch „komplizierten“ Layout-Aufgaben.

Für solche Aufgaben gibt es wesentlich bessere LayoutManager, z.B. das wirklich simple TableLayout:
http://www.clearthought.info/software/TableLayout/

Es ist frei verfügbar und seitdem ich es verwende, kommt mir nix anderes mehr in die Panels :smile:

Ciao, Bill

Hallo,

oder gleich das GridBagLayout, das direkt bei Java dabei ist. Damit hast du i.d.R. die meiste Freiheit, es kann auch am meisten. Es kommt immer auf das Formular drauf an, dass du basteln willst, welcher LayoutManager am geeignetsten dafür ist. Oft ist es auch eine Kombination von mehreren.

mfg
deconstruct

Hi Bill.

Danke für den Tipp, das schaue ich mir direkt mal an. :wink:

Sebastian.

oder gleich das GridBagLayout, das direkt bei Java dabei ist.

das ist eben so kompliziert, dass es eine ganze Weile und viel Geduld braucht, bis man ein ordentliches Resultat erhält.
Daher das TableLayout…

Ciao, Bill

Hallo,

oder gleich das GridBagLayout, das direkt bei Java dabei ist.

das ist eben so kompliziert, dass es eine ganze Weile und viel
Geduld braucht, bis man ein ordentliches Resultat erhält.
Daher das TableLayout…

Naja, so kompliziert ist das nicht. Ich muss sagen, wenn du dich mal daran gewöhnt hast, ist es eigentlich das schnellste. Ist so ähnlich wie mit vi :wink:
Du machst einfach die Gridbag-Constraints, klatscht das Teil drauf, fertig. V.a. erzielt es IMO die besten Ergebnisse, wenn das Fenster in der Größe änderbar ist. Bei manchen Layouts schauen die Formulare nach sowas oftmals nicht mehr so ganz gut aus. Und das „Grid“ ist ja nun nicht so verschieden von einer Tabelle. Du sagst ja im Prinzip auch nur, in welche Spalte/Zeile eine Komponente kommt.

mfg
deconstruct

Ich habe mir das GridBagLayout jetzt mal näher angeschaut.
Ist tatsächlich nicht so schwer, wie ich nach Lektüre des Tutorials bei Sun gedacht hatte.

Und das beste: Damit funktioniert mein Layout so, wie ich es haben will. :smile:

Sebastian.

Naja, so kompliziert ist das nicht. Ich muss sagen, wenn du
dich mal daran gewöhnt hast, ist es eigentlich das schnellste.
Ist so ähnlich wie mit vi :wink:

Mmh, ich finde das GBL auch nicht schwierig, aber seitdem ich das TableLayout kenne, nutze ich lieber dieses, da IMHO einfacher aber genauso mächtig ist.
Vorher hatte ich eine Factory, die mir die notwendigen GBCs generiert hat. Diese war dann doch etwas umfangreich, da man ja auch möglichst alle Fälle abdecken will.

Beim TableLayout geb ich nur noch die Layout-Definition anhand eines double[][] für Spalten/Zeilen vor und rufe dann xMal

add(Component, "CONSTRAINTS");

auf, wobei diese CONSTRAINTS sehr einfach gestrickt sind.

Ich denke mal, dass das evtl. intern wieder auf ein GBL zurückgeführt wird?!

Ciao, Bill