# SWT GridLayout



## ich_wills_wissen (3. Mai 2006)

hallo zusammen !

Habe gerade ein kleines Layout-problem:

Ich habe ich meiner Anzeige zwei Composites mit Inhalt.
Das untere (sie sind untereinander angeordnet) der beiden bekommt aber
einen dynamischen Inhalt (mehrere Listen-objekte, in welche Text eingetragen wird).
Die beiden Composites nehmen sich normalerweise (wenn die Listen nur ganz wenig Text enthalten)
so viel Platz wie es geht (GridData.FILL_BOTH) OHNE sich dabei aber zu überschneiden.

Wenn jetzt aber eine oder mehrere der Listen viel Text enthält dehnt sie sich zu sehr in die Länge und das 
untere Composite überschneidet das obere Composite (zum teil sogar so stark, daß man nurnoch
einen Teil von dem unteren Composite und dessen Inhalt sieht).
Alles was ich will ist, daß die Listen ab einer bestimmten Größe aufhören sich zu vergrößern und
dass dann stattdessen Scrollbars eingeblendet werden.. Wie kriege ich das hin ?

Ich vermute mal irgendwie über die GridData Objekte der Listen.. das Problem ist
halt, daß die Listen nach Möglichkeit alle gleich groß sein sollen..

Weiß jemand Rat ?  ???:L 

grübeln,

ich_wills_wissen  :###


----------



## byte (3. Mai 2006)

ich_wills_wissen hat gesagt.:
			
		

> das Problem ist halt, daß die Listen nach Möglichkeit alle gleich groß sein sollen..



Heisst das, Du möchtest erreichen, dass beide Listen 50% der Höhe bekommen, unabhängig von ihrem Inhalt? Dann würde ich ein FormLayout empfehlen, damit kannst Du sehr komfortabel mit Prozentwerten arbeiten.

Also z.b. so:


```
FormData data = new FormData();
data.left = new FormAttachment(0, 0);
data.right = new FormAttachment(100, 0);
data.top = new FormAttachment(0, 0);
data.bottom = new FormAttachment(list2, -5);
list1.setLayoutData(data);

data = new FormData();
data.left = new FormAttachment(0, 0);
data.right = new FormAttachment(100, 0);
data.top = new FormAttachment(list1, 5);
data.bottom = new FormAttachment(100, 0);
list1.setLayoutData(data);
```


----------



## ich_wills_wissen (3. Mai 2006)

Ich komm damit irgendwie nicht klar.. 

ich habe ein Composite (das obere, enthält Steuerelemente) von dem ich möchte, daß es 
5% Rand nach rechts und 5% Rand nach links lässt. Den Rest des Platzes soll das Composite
für sich benutzen (90% also der gesamten Breite).
Mit der Höhenangabe habe ich keine Probleme, aber das mit dem mittig ausrichten
bekomme ich nicht gebacken.. 

Understanding SWT Layouts (Eclipse.org) hilft mir da leider auchnet weiter... 
 :bahnhof:   

Kann mir das bitte jemand erklären bzw mir sagen was ich eingeben
muss, damit sich das Composite mittig ausrichtet ?


Danke nochmal und Gruß,

ich_wills_wissen  :###


----------



## byte (3. Mai 2006)

```
Composite comp = ...
comp.setLayout(new FormLayout());

FormData data = new FormData();
data.left = new FormAttachment(5, 0);
data.right = new FormAttachment(95, 0);
data.top = new FormAttachment(0, 0);
data.bottom = new FormAttachment(100, 0);
comp.setLayoutData(data);
```

So hat comp eine Breite von 90% der Gesamtbreite mit einem Rand rechts und links von jeweils 5%. Ist es das, was Du wolltest?


----------



## ich_wills_wissen (3. Mai 2006)

Hallo byto,

vielen Dank, genau sowas habe ich gesucht 
Ich habe den "Fehler" gemacht und mit den Offset werten rumgespielt,
habe aber mittlerweile soviel herausgefunden, als daß die Offset-werte nur
in Pixel angegeben werden und nicht in Prozent relativ zur Größe
des auszurichtenden Objektes.
Uffa.. bin mal gespannt ob ich das, was ich hinkriegen will noch schaffe..
Ursprünglich hatte ich nur GridLayouts genutzt (und darin dann Composites
mit eigenen Layouts geschachtelt). Wenn ich das Bild aufgebaut hat waren
die beiden Composits richtig ausgerichtet, aber sobald man die Größe des 
Fensters geändert hat hat das eine Composite das andere überzeichnet..
Liegt aber wohl an meiner Konstelation, ich nutze gerade ein Stacklayout
zusammen mit Grid und jetzt nun auch Formlayout..

Vielen Dank für Deine Hilfe, das hat mir sicherlich einige Zeit und Frust
gespart !

Besten Dank,


ich_wills_wissen


----------



## byte (3. Mai 2006)

Jup genau, die Offset Werte sind in Pixeln (hätte ich vielleicht gleich dazu sagen können). Das ist sehr praktisch, wenn Du mit Hilfe von FormAttachments zwei Widgets aneinander andockst. Dann kann man damit nämlich noch einen kleinen Abstand zwischen den Elementen hinkriegen (Stichwort: Margin, Spacing, Padding). 

Beim GridLayout musst Du häufig viele Felder des GridDatas setzen, damit es auch nach nem Resize noch gut aussieht (zum Beispiel minimumHeight/Width oder height/widthHint ...).


----------

