GridBags mit konstanter Groesse

Status
Nicht offen für weitere Antworten.

gnom

Mitglied
Hi,

ich habe ein Panel mit gridBagLayout. Dieses Panel enthaelt mehrere Labels, die durch das gridBagLayout gleichmaessig verteilt werden. Ich moechte nun die Groesse der Labels per Knopfdruck veraendern koennen, ohne dass die gridBags mitwachsen. Es soll auch in Kauf genommen werden, dass sich die Labels dadurch eventuell ueberlappen.

Meine Frage also: ist es moeglich den gridBags einen festen Wert zuzuweisen?

Das Fenster sollte uebrigens trotz allem vergroesserbar sein :)

Gruss gnom
 

André Uhres

Top Contributor
Du kannst den Komponenten ein relatives Gewicht geben (gridBagConstraints.weightx, gridBagConstraints.weighty)
und die Komponentengrösse fixieren (jLabel1.setPreferredSize). Daß sich beim Resizen die bags anpassen
ist aber nicht zu vermeiden, das ist ja der Sinn des Layouts.
 

gnom

Mitglied
hmpf,

ich habs jetzt mal mit insets versucht. wenn ich die width eines labels vergroessere (zB um 10), verkleinere ich die insets links und rechts um die haelfte (also jeweils -5). das klappt soweit auch ganz gut, allerdings faengt die komponente dabei an zu wandern. vielleicht habe ich die falsche reihenfolge bei den insets, weisst du die zufaellig?

new Insets(links, oben, unten, links) ?



wenn das aber weiterhin nicht richitg klappt, muss ich die positionen wohl selbst bestimmen und ohne layout arbeiten, oder? dazu gleich noch eine frage vorweg: wird den komponenten eine automatische groesse zugewiesen, wenn ich ihnen keine preferredSize oder Size gebe?
 

André Uhres

Top Contributor
Sag doch einfach mal wie die graphische Benutzerschnittstelle aussehen soll.
Wahrscheinlich lässt sich das auch ohne GBL machen :wink:
 

gnom

Mitglied
naja, ich wollte mir ein kleines programm basteln, um organigramme/flussdiagramme zu zeichnen, obwohl es das schon gibt ;)

der user gibt anzahl spalten und reihen vor, dementsprechend werden textfelder erstellt.
der user traegt bezeichnungen in die felder ein und drueckt OK.
fuer jedes beschriftete feld wird ein "element objekt" erzeugt.
dieses objekt enthaelt jegliche informationen ueber GROESSE, farbe, text , POSITION usw.
textfeldpanel wird removed, drawpanel und toolpanel geadded.


auf dieses drawpanel werden nun die labels (auch ein attribut des element objekts) platziert.
das funktioniert auch alles wunderbar, ich kann auch die groesse veraendern.


nur ist mir jetzt eingefallen, dass es unter umstaenden auch schoen waere, wenn man ein element so gross machen kann, dass es ueber 2 spalten ragt. dies laesst das gridbag layout aber nicht zu, da es immer mitwaechst und sich die komponenten dadurch nur auseinander bewegen.

als loesung hatte ich mir ueberlegt, dem drawpanel einfach kein layout zu geben, die koordinaten der komponenten selbst zu berechnen und zu platzieren. dann noch einen listener auf den frame klatschen und alle resizes abfangen, sodass die positionen der komponenten angepasst werden kann. alles schoen und gut, kleines programm gebastelt um die idee auszuprobieren - klappte auch.

jetzt ist es aber so, dass die labels in meinem eigentlichen programm nicht sichtbar werden, nachdem ich sie adde.
ich weiss nicht warum. "getcomponentcount()" gibt die richtige anzahl aus.
fuege ich dem drawpanel ein flowlayout zu, sind sie auf einmal sichtbar.... aber natuerlich an der falschen position.


brauchst du code, falls du mir noch helfen moechstest ;) ? welche stellen interessieren dich?
 

André Uhres

Top Contributor
Bei NullLayout genügt es nicht die Position anzugeben (setLocation). Du musst zusätzlich die Grösse angeben (setSize). Position und Grösse kann man auch gleichzeitig setzen mit "setBounds".
 

gnom

Mitglied
oh man, dann liegt es wohl daran... ich probiers nachher mal aus, kann gerade noch nicht.

hm, da ich den meister hoechstpersoenlich aber gerade in meinem thread habe :) :) :) , muss ich aber noch einige fragen dranhaengen.

und zwar dreht es sich um JTextPanes. durch einen anderen thread habe ich herausgefunden wie man den text horizontal zentriert. ich hab's aber nicht hingekruiegt ihn zusaetzlich noch vertikal zentrieren. geht das irgendwie?

wenn nicht, kann man die JTextPane so einstellen, dass sie sich beim zeilenumbruch automatisch um die passende groesse vergroessert?

UUND noch eine letzte: man kann ja die groesse der luecke zwischen den zeilen einstellen. bleibt die bei unterschiedlicher textgroesse dann konstant?


bin fuer jegliche antworten dankbar :)
 

gnom

Mitglied
tatsaechlich, es funktioniert, danke nochmal
was hab ich mir den kopf zerbrochen und kleine beispielprogramme geschrieben, wo ich es zufaellig richtig gemacht habe.... aber dieser fehler lag wirklich im detail :eek:

da haeng ich doch glatt noch ne kleine zusatzfrage dran, sozusagen ein zuckerle:
worin liegt denn der unterschied zwischen setSize() und setPreferredSize() ?


sodele, und nun freue ich auf die antworten zur JTextPane :]
 

Wildcard

Top Contributor
gnom hat gesagt.:
da haeng ich doch glatt noch ne kleine zusatzfrage dran, sozusagen ein zuckerle:
worin liegt denn der unterschied zwischen setSize() und setPreferredSize() ?
Hab den Rest des Threads nicht gelesen, aber:
setSize setzt die Größe der Komponente. Diese wird aber vom LayoutManager (sofern verwendet) gesetzt, geht also nur mit null-Layout.
setPreferredSize setzt einen Hint für den LayoutManager den dieser versucht umzusetzen.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben