# gridlayout elemente auf ganze breite aufteilen



## continue (5. Mai 2010)

in meiner view habe ich ein Group element welches ein gridLayout besitzt:

```
myGroup= new Group(parent, SWT.BORDER_SOLID);
myGroup.setLayout(new GridLayout(4, true));
```

jetzt ist es so dass die elemente nebeneinander reihe für reihe angereiht werden und die elemente im grid linksseitig ausgerichtet sind.
ich möchte aber dass die elemente so positioniert werden dass die breite der columns des grids auf die ganze breite der view/und somit der group ausgerichtet werden.
also statt

```
[_ _ _ _            ]
```
möchte ich gerne volgendes aussehen haben


```
[_     _     _     _]
```

gibt es da ein feld dass ich setzen muss? oder wie mach ich das?


----------



## SlaterB (6. Mai 2010)

vielleicht hast du ja eher

```
[_ _ _ _ ]
```
statt

```
[_ _ _ _            ]
```

wenn die enthaltenen Elemente groß sind, mag die Group von selber größer werden,
andersrum kommt man aber manchmal auch zum Ziel

deine Aufgabe wäre dann die Breite der ganzen Group zu erhöhen, was immer auch eine Group ist,
wo steckt die drin mit welchem Layout?


----------



## continue (6. Mai 2010)

Also mein Group element ist in der View im parent composite drin....


```
public void createPartControl(Composite parent) {
		myGroup= new Group(parent, SWT.BORDER_SOLID);
		myGroup.setLayout(new GridLayout(4, true));
```

Die group hat eh schon die volle breite des views.
aber das grid wird nicht über die ganze breite verteilt, sondern liegen links an....


----------



## SlaterB (6. Mai 2010)

mir scheint jedenfalls, dass es am GridLayout selber nichts zu rütteln gibt,
was du mit 'View im parent composite' anstellen kannst, weiß ich leider nicht


How to Use GridLayout (The Java™ Tutorials > Creating a GUI With JFC/Swing > Laying Out Components Within a Container)


> If the GridLayoutDemo window is resized, the GridLayout object changes the cell size so that the cells are as large as possible, given the space available to the container.





-----

> Die group hat eh schon die volle breite des views.

getestet mit Border, Hintergrundfarbe oder sonstwas?
oder weitergeleitet: wie groß ist die View, vielleicht ist die so klein


----------



## Koringar (6. Mai 2010)

Das GridLayout gibt nur die Grobe anordnung an, wenn du dies verfeinern willst, musst du mit GridData auf deinen Composites arbeiten oder dann eher die GridDataFactory. Dort gibt es dann auch das Attribut 'grab' was die Elemete so anordnet wie du es willst.

Ein Beispiel Grid Layout Complex : LayoutSWT JFace EclipseJava würde aber lieber mit der GridDataFactory arbeiten, viel angenehmer.


----------



## SlaterB (6. Mai 2010)

ok, wahrscheinlich falsches GridLayout meinerseits


----------



## continue (6. Mai 2010)

SlaterB hat gesagt.:


> > Die group hat eh schon die volle breite des views.
> 
> getestet mit Border, Hintergrundfarbe oder sonstwas?
> oder weitergeleitet: wie groß ist die View, vielleicht ist die so klein





ja. Das Group element hat einen border. Der breitet sich über die gesammte Größe des Views aus.

Also der Code:

```
....
...
	public void createPartControl(Composite parent) {
		myGroup = new Group(parent, SWT.BORDER_SOLID);
		myGroup.setLayout(new GridLayout(2, true));

		Label lblopt = new Label(myGroup, SWT.LEFT);
		lblopt.setText("opt:");

	        groupopt= new Group(myGroup, SWT.LEFT);
		groupopt.setLayout(new GridLayout(1, false));
		btnopt1 = new Button(groupStatus, SWT.RADIO);
		btnopt1.setText("opt1");
		btnopt2 = new Button(groupStatus, SWT.RADIO);
		btnopt2.setText("opt2");
	}
```

das is eh im prinzip alles nur wird das ganze eben nicht auf die ganze breite verteilt....


----------



## Wildcard (6. Mai 2010)

```
package swtstuff;

import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;

public class GridLayoutDemo {

	GridLayoutDemo(){
		Shell shell = new Shell(SWT.RESIZE | SWT.CLOSE);
		shell.setSize(200, 200);
		shell.setLayout(new FillLayout());
		createPartControl(shell);
		shell.open();
		while(!shell.isDisposed())
		{
			if(!Display.getCurrent().readAndDispatch())
				Display.getCurrent().sleep();
		}
	}
	
    public void createPartControl(Composite parent) {
        Group myGroup = new Group(parent, SWT.BORDER_SOLID);
        GridLayoutFactory.swtDefaults().numColumns(4).equalWidth(true).applyTo(myGroup);
        for (int i = 0; i < 4; i++) {
			Label l = new Label(myGroup, SWT.NONE);
			l.setText(Integer.valueOf(i).toString());
			GridDataFactory.fillDefaults().grab(i==0, false).align(SWT.CENTER, SWT.CENTER).applyTo(l);
		}
        
    }
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new GridLayoutDemo();

	}

}
```


----------

