getPreferredSize

Status
Nicht offen für weitere Antworten.

Calamitous

Bekanntes Mitglied
hallo!
bin mir nicht ganz sicher ob des Thema hier paßt aber irgendwie schon (vielleicht gehörts auch nach awt & swing...)
zum Problem: benutze für mein JPanel ein eigenes Layout.
Nun wird ja das getPreferredSize vom JPanel aufgerufen und dieser leitet das weiter an den "LayoutManager".
Besteht nu die möglichkeit nur dann getpreferredSize vom LayoutManager "laufen" zu lassen wenn eine bestimmte Eigenschaft gesetzt/nicht gesetzt ist.
sollte so zusagen so sein:
Code:
Dimension getPreferredSize()
{
    if(sizeFixed == true)
    {
        return fixedDimension;    
    }
    else
    {
        //getPreferredSize vom LayoutManager aufrufen
    }

}

-> nur Prinzip Code *g*
kann man das so irgendwie machen?
weil der Aufruf / die Übergabe an den LayoutManager ist ja nicht wirklich "sichtbar"...?
danke für Ideen, bin da echt ratlos...
 
B

bygones

Gast
erbt deine Klasse von JPanel ?
Dann schreib doch einfach:
Code:
super.getPreferredSize();
 

Calamitous

Bekanntes Mitglied
ja tut sie
aber geht das weil...
wenn ich in getPreferredSize (von der Klasse die von JPanel erbt) etwas reinschreibe, wird das überhaupt ausgeführt -> da ja das getPreferredSize eigentlich vom LayoutManager benutzt wird... ( soll eh so sein, nur halt in gewissen fällen...)
 
B

Beni

Gast
???:L

Also wenn irgendjemand die bevorzugte Grösse einer Component erfahren will, ruft er "Component#getPreferredSize" auf.
Die Component leitet danach evtl an den LayoutManager weiter, sofern der nicht null ist, und sofern nicht bereits "Component#setPreferredSize" aufgerufen wurde.

Und wenn du die Methode überschreibst, sollte sie auch tatsächlich aufgerufen werden.
 

Calamitous

Bekanntes Mitglied
aha heißt also ich kann wenn ich getPreferredSize überschreibe in etwa folgendes machen:
Code:
if(fixedSize==true)
{
// gibhaltwaszurück;
}
else
{
 return myLayout.getPreferredSize();
}
aber wie genau kann ich im JPanel auf das eigene Layout zugreifen?
muss ich das ebenfalls über getLayoutManager oder wie immer das nun geht zugreifen oder geht das irgendwie besser/schneller?
 
B

Beni

Gast
Wieso nimmst du nicht einfach dbac's Vorschlag, scheint mir wirklich das einfachste zu sein. (Oder gibt es da ein Problem, das ich überseh?)

(Ansonsten hilft auch immer die API, und ein bisschen logisches denken: "get" + "Layout" = getLayout :wink: )

mfg Beni
 

Calamitous

Bekanntes Mitglied
bin mir nicht sicher ob ich dbac's Vorschlag richtig interpretiert habe....
also IM LayoutManager selber super.getPreferredSize auf zu rufen
-> Problem ist ich muss überschreiben weil das "eigene" JPanel die Größe etwas anders (afgrund Konstruktorübergaben, etc...) ermittelt.
überschreibe ichs aber wird ja getPreferredSize von meiner Klasse aufgerufen und der leitets an den LayoutManger weiter und da war ich mir ja nicht sicher (siehe Frage vorhin)

-> getLayout; hast recht ist mir partout nicht eingefallen *g*
 
Status
Nicht offen für weitere Antworten.

Oben