GridBagLayout bring mich um den Verstand

Status
Nicht offen für weitere Antworten.

K0NFUZIUS

Mitglied
Hallo zusammen,
hier mein Problem:
Ich möchte auf einem Panel (A) im GridBagLayout 3 weitere Panel (X,Y,Z) anordnen. Das Panel A ist in einem BorderLayout.
Also müssen erst einmal ein paar Constraints her
Code:
GridBagConstraints gBConstTrader = makeGbc(0,0,1,1);
       // gBConstTrader.weightx = 100; //25
       // gBConstTrader.weighty = 100; //75 // if free space in y - direction fill up with main panel
        gBConstTrader.fill = GridBagConstraints.BOTH;
        gBConstTrader.anchor = GridBagConstraints.NORTHEAST;
        
        //set constraint for Customer Panel
        GridBagConstraints gBConstCustomer = makeGbc(1,0,1,1);
    //    gBConstCustomer.weightx = 100;//75
    //    gBConstCustomer.weighty = 100;//75 // if free space in y - direction fill up with main panel
        gBConstCustomer.fill = GridBagConstraints.BOTH;
        gBConstCustomer.anchor = GridBagConstraints.NORTHEAST;
        
        //set constraint for communication panel
        GridBagConstraints gBConstCom = makeGbc(0,1,2,1);
     //   gBConstCom.weightx = 100;
     //   gBConstCom.weighty = 100; //25
        gBConstCom.fill = GridBagConstraints.HORIZONTAL;
        gBConstCom.anchor = GridBagConstraints.CENTER;
Danach erzeuge ich die Panels X,Y,Z welche wiedrum Panel Elemente beinhalten.
Code:
traderPanel = new UIHabitatTraderPanel(applet, this, main); //PANEL X
this.add(traderPanel); // PANEL A
Das weitere geschiet mit den anderen Panels.
Danach setzte ich die Constaints:
Code:
gBLayout.setConstraints(traderPanel ,gBConstTrader);
Für alle weiteren Panels mach ich das genau so.
Dann Das Layout noch auf das Panel...
Code:
this.setLayout(gBLayout);

Wenn ich wie oben gezeigt weightx und weighty auskommentiert habe passiert gar nichts... es werden nur 3 kleine Kästchen angezeigt... ich hätte aber gerne, das die Panels X,Y,Z je nach Inhalt sich den Platz auf Panel A automatisch teilen.
Wenn ich die Kommentare rausmache werden die Panels "aufgespreizt" aber leider immer nur im angegebenen Verhäätnis (z.B. 25:75). Ich dachte immer das gerade das der Vorteil des GridbagLayouts wäre das sich die Panels automatisch anpassen 🙁

Das habe ich auch schon versucht: ohne Erfolg
Code:
this.validate(); 
this.repaint();

Vielen Danke für jeden Tipp

Gruß
Jörg
 
Die weightx/y werden auf jeden Fall benötigt.
Hast du auch etwas auf den Panels? Solange sie einfach so alleine sind (keine 100 Buttons auf ihnen sind), benötigen sie nicht sehr viel Platz... (und teilen ihn einfach unter sich).
 
Erst mal Danke für die Antwort.

Vielleicht noch kurz zur Anordnung der Panels
*************************************
* Panel X_____ *________ Panel Y________ *
* ___________ *______________________ *
* ___________ *______________________ *
* ___________ *______________________ *
* ___________ *______________________ *
* ___________ *______________________ *
**************************************
* Panel Z_____________________________ *
* ___________________________________ *
**************************************

Ich habe jetzt das weightx von Panel A auf 0 gesetzt.
Das Resultat war, dass das Panel X zwar angezeigt wird, aber nur ganz schmal... Es wird eine Scrolleiste eingefügt. Ich kann dadurch erkennen, das die Panels, welche auf A geadded werden ... korrekt hinzugefügt wurden.
Sollte sich jetzt nicht das Panel A an diese SubPanels anpassen und sich verbreitern?
Ich habe genacht, dass der Parameter weightx nur aussagt, in welchem Verhätnis die Panels zu nehmen, wenn noch freier Platz zur Verfügung steht oder nicht? *grübels*


Danke nochmal
Gruß
Jörg
 
Die weight's bestimmen auch das Verhältnis, wenn es zuwenig Platz hat (bzw, sie beeinflussen wenigstens die Verteilung des Platzes).

Hm, ja, ein bisschen erweitern sollte es sich. Das Problem ist halt, das weightx/y "stärker" sind.
Vielleicht ist das GridBagLayout nicht geeignet für dein Problem. Wie wäre es mit einem JSplitPane anstelle von X und Y? (X und Y kommen dann in das Splitpane). Dann kann der Benutzer selbst die optimale Grösse bestimmen.
 
Noch mal Danke für die Antwort,
leider kann ich nur AWT verwenden (Vorgabe)
JSplitPane ist ja leider Swing 🙁

Sonstige Vorschläge?
Gruß Jörg
 
Hab leider keine Zeit ausführlich zu antworten:
http://www.oreilly.com/catalog/javawt/book/ch07.pdf

Allgemein, wenn du mit AWT arbeiten musst echt empfehlenswert hier rein zu schaun:
http://www.oreilly.com/catalog/javawt/book/index.html
Referenzen sind immer gut 🙂

Lass dich nicht abschrecken, dass es von 1997 ist, seit dem gab es keine grundlegenden neuen Änderungen mehr im AWT.

Wenn du die Lösung hast, schreibs trotzdem hier rein und setz des Häcken. Ist gut für die SuFu-Benutzer.

MfG Sem
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben