# Höhe und Breite eines Panels im GridBagLayout ermitteln



## K0NFUZIUS (19. Mai 2005)

Hallo zusammen,
ich bin kurz davor ein C Programm zuschrieben  :?  Ihr seht also wie verzweifelt ich bin  :lol: 
Mein Problem:
Ich habe drei panels im GridBagLayout angeordnet. Die Größe aller Panels wurde NIChT mit .setSize(W,H) festgelegt.
Darausfolgt, dass das GridBagLayout mir die Arbeitabnimmt und die Panels in einer geeigneten Größe auf mein "Main"-Panel setzt.

Um jetzt Objekte in einem der Unterpanels anzuordnen, benötige ich die Höhe und Breite der UnterPanels zur Berechnung. Wobei wir bei meinem Problem wären :cry: .

also versuchte ich das naheliegendste
unterPanel.getWidth() 
unterPanel.getHeigth()
Beide Methoden geben mir 0 zurück. Setzte ich die Panel Size mit .setSize() geben sie den gesetzen Wert von .setSize aus. Was mir ja aber nichts bringt, da ich ja den "dynamischen" Wert haben möchte.

Und so machte ich mich auf einmal das dolle Layout Objekt zubefragen.
Hui toll publich Arrays wie columnWidths
aber leider ist das Array null (
Versuche mit
gBLayout.getLayoutDimensions() weiter zukommen schlugen auch fehl.

 :?:  Ich hoffe eine einfache Frage: Wie bekomme ich die Breite und Höhe eines Panels welches durch ein GridBagLayout angeordnet ist :?: 

Vielen Dank schon einmal

Gruß
Jörg


----------



## Wildcard (19. Mai 2005)

mit getWidth und getHeigth bekommst du die tatsächliche aktuelle Größe der Panels. Wenn du 0 zurückbekommst
wird das schon stimmen. Denke dein Fehler liegt woanders...
Fragst du den Wert ab bevor die Panels angezeigt wurden?´Liegen noch andere Components in den Panels?


----------



## K0NFUZIUS (19. Mai 2005)

Hallo Wildcard,
ersteinmal danke für die Antwort. Ich hatte schon gedacht, das das die Lösung meines Problemes sein könnte ... aber leider war das nicht der Fall:
hier mal ein auszug aus meinem Code:

```
//create Panels
        UIHabitatCustomerPanel customerPanel = new UIHabitatCustomerPanel(applet, this, main);
        UIHabitatTraderPanel traderPanel = new UIHabitatTraderPanel(applet, this, main);
        UIHabitatTraderCom traderCom = new UIHabitatTraderCom(applet, this, main);

        //als Test hinzugefügt
        customerPanel.setVisible(true);
        traderPanel.setVisible(true);
        traderCom.setVisible(true); 
        
        //set GridBag Constraint for the Panel
        gBLayout.setConstraints(customerPanel, gBConstCustomer);
        gBLayout.setConstraints(traderPanel, gBConstTrader);
        gBLayout.setConstraints(traderCom, gBConstCom);
        
        this.setLayout(gBLayout);
        
        //Add Panel to TradePostPanel
        this.add(traderCom);
        this.add(traderPanel);
        this.add(customerPanel);
        
        int test = customerPanel.getHeight();
```

leider ist test immer noch 0  :cry: 
Das CustomerPanel ist in diesem Fall leer aber auch wenn ich z.B. eine TextArea drauf mache bleibt bei "0"


----------



## Wildcard (20. Mai 2005)

Die Panels brauchst dich nicht visible zu setzen, ist schon default. Es geht um den Frame und der ist zu diesem Zeitpunkt (ist wohl aus dem Konstruktor!?) noch nicht gezeichnet, oder?


----------



## K0NFUZIUS (20. Mai 2005)

Ja das kann sien, dass das Panel da noch nicht gezeichnet ist...
Kann ich das zeichnen irgendwie erzwingen?

Gruß Jörg


----------



## Wildcard (20. Mai 2005)

Warum willst du die Größe wissen bevor das ganze sichtbar ist?


----------



## Beni (20. Mai 2005)

Du kannst die Methode "validate" aufrufen, damit sollten alle LayoutManager ausgefuehrt werden.


----------



## K0NFUZIUS (20. Mai 2005)

Hallo nochmal,
ich habe jetzt die sache mit validate() versucht. -> kein Erfolg  :cry: 
dann habe ich auch noch ein show() dahintergesetzt -> kein Erfolg  :cry: 

*verzweifel*
Hat vielleicht noch jemand nen Ratschlag?

Danke schon mal 
Jörg


----------



## Wildcard (20. Mai 2005)

code?


----------



## K0NFUZIUS (21. Mai 2005)

Hallo Wildcard,
dank Deines Tipps habe ich meinen Fehler gefunden  :applaus: 
Das Problem war um es einmal abstrakt zu Beschreiben:

Applet erzeugt nach Knopfdruck eines von X beliebigen Panels. ( added es aber noch nicht!)
Das erzeugte X1 erzeugt Y1, Y2, Y3 und added diese zu X1.

Problem ist jetzt natürlich, das X1 noch gar nicht auf den Screen geadded wurde...

Lösung war nun:
Applet erzeugt X1 und X1 added sich selber auf den Screen.
X1 erzeugt Y1 ( Y1 added sich selbst auf X1) usw.

Vielen Dank nocheinmal an Wildcard und an Beni

 :toll: 

Gruß Jörg


----------

