PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : gridbaglayout vs resize


clm[k1]
2004-10-20, 11:30:47
Hallo,

hab n kleines problem mit dem gridbaglayout.
Folgende situation: Hab ne schöne GUI gebastelt, wo diverse componenten drinne sind.
links sind einige JTextFields untereinander angeordnet, daneben ist ein JEditorPane das in ein JScrollPane eingebettet ist, unter alle dem sind noch 2 Buttons, auf die komplette breiter verteilt.
Die JTextFields hab ich so hinzugefügt das eigentlich weder Höhe noch breite veränderbar sein sollen, die buttons sollen nur in der breite veränderbar sein, und das JScollPane (mit dem JEditorPane drinne) komplett in höhe und breite.

Problem: Das Gridbaglayout hält sich nicht dran!
Wenn ich das fenster resize, dann verändern sich die TextFields und das ScrollPane/EditorPane gleichermaßen in der breite!
Dabei will ich doch, das sich nur das EditorPane in der breite verändert!

Hat jemand eine Idee woran das liegen kann?

Ach ja: wenn im EditorPane einiges an Text drinne steht, dann schenkt er dem beim resizen mehr beachtung - die TextFields verändern sich dann zwar immer noch in der breite aber nicht mehr so stark...

gruß
clm[k1]

Senior Sanchez
2004-10-20, 11:46:44
Noch ein Anhänger des GridBagLayouts ;)) Glaub mir, hab auch schon Tage damit verbracht da kleine Fehler rauszubekommen.

Erstmal wäre nen Codepost gut, aber vllt kann ich dir auch so helfen.

Das Resize-Verhalten im GridBagLayout wird gesteuert einmal durch das angegebene Fill-Verhalten in den GridBagConstraints Objekten (Horizontal, Vertical, Both) und gibt schonmal die möglichen Ausbreitungsrichtungen an. Das andere, was öfters vergessen wird sind die weightx und weighty attribute. Diese geben an, wie zusätzlicher Platz im Panel aufgeteilt werden soll. Hat ein Objekt ein weightx von 1.0, dann wird aller zusätzlicher Platz in horizontaler Richtung an das Objekt zugewiesen. Haben mehrere das weightx von 1.0 oder auch einen anderen weightx-Wert != 0, dann wird verhältnismäßig gerecht geteilt zwischen diesen Objekten.
Mit weighty verhält es sich analog.


Hoffe ich konnte helfen, wenn nicht frag nochmal nach ;)


mfg Senior Sanchez

clm[k1]
2004-10-20, 12:08:36
Naja, ich hab das schon über die weightx und weighty attribute gesetzt.
Aber jetzt wo du das Fill-verhalten erwähnst, fällt mir auf das die methode zum hinzufügen von componenten zum layout automatisch BOTH verwendet :ugly:

muss ich doch gleich mal umschreiben...

aber wo wir gerade beim thema sind: wenn ich jetzt das fenster auf eine gewisse größe verkleinere, dann werden die TextFields auf ein pixel breite reduziert.
(je nach dem ob im EditorPane was drinne steht, eher oder später...)
Gibt es eine möglichkeit, das zu verhindern? sprich das die immer eine feste breite haben, auch beim verkleinern unter "normal"?

gruß
clm[k1]

mithrandir
2004-10-20, 13:13:15
Dere!

Nun, du kannst ja für jede Komponente auch eine minimale Größe festsetzen. Daran sollten sich alle LayoutManager dann halten.

JComponent:
public void setMinimumSize(Dimension minimumSize)

bye, mith

clm[k1]
2004-10-20, 13:38:44
@mithrandir: Danke für den Tip - damit gehts :smile:


gruß
clm[k1]

Senior Sanchez
2004-10-20, 15:05:19
Jupp, gibt halt für jede JComponent drei wichtige Methoden, die fürs resizen wichtich sind:
setMinimumSize()
setMaximumSize()
setPreferredSize()

Diese steuern halt die Größe der Komponente.

Aber schön das wieder einer mehr glücklich ist mit dem GridBagLayout ;D


mfg Senior Sanchez

Zarathustra
2004-10-25, 14:02:20
setMinimumSize()
setMaximumSize()
setPreferredSize()


In welchen fällen bewirken diese nichts?

Gast
2004-11-01, 21:01:06
In welchen fällen bewirken diese nichts?
das hängt vom verwendeten layout manager ab. manche scheren sich einen dreck um minimum size. aus dem kopf weiß ich leider nicht genau, was mit wem funktioniert. die api müsste da helfen.

Gast
2004-11-01, 21:16:06
edit: z.b. borderlayout hält sich nicht dran, da es seine eigenen richtlinien für resize hat. da musste ich mit einer funktion nachhelfen, um eine minimalgröße zu bekommen. leider vergesse ich dinge, wenn ich mich nicht ständig damit beschäftige.