# SWT-Elemente an View-Fenster angleichen und automatisch resizen



## coffeejava1987 (30. Okt 2011)

Hi,

nachstehend seht ihr in etwa das, was ich erstellen möchte (RCP-View mit SWT). Dabei habe ich allerdings so einige Probleme, wo ich eure Hilfe benötige:







Ich möchte hierbei, dass die Elemente sich automatisch vergrößern oder verkleinern, wenn ich das Fenster vergrößere oder verkleinere (also auch alle Buttons, Label, Text usw. usf.). Dazu habe ich natürlich schon viel durchgelesen und bin auf 
	
	
	
	





```
GridLayoutFactory
```
 gestoßen, was wohl helfen soll, dass sich die Fenster automatisch mitverkleinern bzw. vergrößern.

Bisher sieht mein Versuch so aus:


```
public void createPartControl(Composite parent) {
		 	Composite firstGroup = new Composite(parent, SWT.NONE);
		 	
		 	GridLayoutFactory.swtDefaults().numColumns(11).equalWidth(false).applyTo(firstGroup);
		 	
		 	Text t = new Text(firstGroup, SWT.None);
		 	
		 	GridDataFactory.fillDefaults().grab(true, false).align(SWT.CENTER, SWT.CENTER).applyTo(t);
		 	
		 	Button btnSuchen = new Button(firstGroup, SWT.NONE);
		 	btnSuchen.setText("Suchen");
		 	GridDataFactory.fillDefaults().grab(true, false).align(SWT.CENTER, SWT.CENTER).applyTo(btnSuchen);
		 	
		 	Button btnRefresh = new Button(firstGroup, SWT.NONE);
		 	btnRefresh.setText("Refresh");
		 	GridDataFactory.fillDefaults().grab(true, false).align(SWT.CENTER, SWT.CENTER).applyTo(btnRefresh);
		 	
		 	Label lblVon = new Label(firstGroup, SWT.FILL);
		 	lblVon.setText("Von");
		 	GridDataFactory.fillDefaults().grab(true, false).align(SWT.CENTER, SWT.CENTER).applyTo(lblVon);
		 	
		 	DateTime dt1 = new DateTime(firstGroup, SWT.FILL);
		 	GridDataFactory.fillDefaults().grab(true, false).align(SWT.CENTER, SWT.CENTER).applyTo(dt1);
		 	
		 	Label lblBis = new Label(firstGroup, SWT.FILL);
		 	lblBis.setText("Bis");
		 	GridDataFactory.fillDefaults().grab(true, false).align(SWT.CENTER, SWT.CENTER).applyTo(lblBis);
		 	
		 	DateTime dt2 = new DateTime(firstGroup, SWT.FILL);
		 	GridDataFactory.fillDefaults().grab(true, false).align(SWT.CENTER, SWT.CENTER).applyTo(dt2);
		 	
		 	Button btnWoche = new Button(firstGroup, SWT.NONE);
		 	btnWoche.setText("Woche");
		 	GridDataFactory.fillDefaults().grab(true, false).align(SWT.CENTER, SWT.CENTER).applyTo(btnWoche);
		 	
		 	Button btnMonat = new Button(firstGroup, SWT.NONE);
		 	btnMonat.setText("Monat");
		 	GridDataFactory.fillDefaults().grab(true, false).align(SWT.CENTER, SWT.CENTER).applyTo(btnMonat);
		 	
		 	Button btnQuartal = new Button(firstGroup, SWT.NONE);
		 	btnQuartal.setText("Quartal");
		 	GridDataFactory.fillDefaults().grab(true, false).align(SWT.CENTER, SWT.CENTER).applyTo(btnQuartal);
		 	
		 	Button btnJahr = new Button(firstGroup, SWT.NONE);
		 	btnJahr.setText("Jahr");
		 	GridDataFactory.fillDefaults().grab(true, false).align(SWT.CENTER, SWT.CENTER).applyTo(btnJahr);
		 	
		 
		 	
		 	
	}
```

Obiger Code führt dazu, dass meine View beim Öffnen so aussieht:






Nun sind meine Fragen:

a) Wie kann ich das View-Fenster in meiner RCP-Anwendung so gestalten, dass es automatisch so groß wird, wie die Elemente sichtbar sind?

b) Wie füge ich in "die nächste Zeile" den TableViewer und den TabFolder ein? Und wie kann ich die TableViewer und den TabFolder mit den TabItems so gestalten, dass sie dynamisch die Hälfte der View-Größe automatisch annehmen (auch beim verkleinern oder vergrößern des View-Fensters)? 

c) Wie kann ich "den unteren Rahmen", damit meine ich die Checkboxes und die Labels unter dem TableViewer und dem TabFolder, so anordnen, dass sie auch wirklich an diesen angeordnet sind? 

Vielleicht kann ja auch jemand schnell das zusammenhacken. Das wäre natürlich prima...


----------



## Sonecc (31. Okt 2011)

Eclipse Corner Article: Understanding Layouts in SWT

Dort steht alles erklärt.
Gridlayout nutzen ist schon nicht verkehrt, aber du musst dann auch den Platz ausnutzen (Stichwort FILL)

Beispiel:


```
GridData data = new GridData();
		data.grabExcessHorizontalSpace = true;
		data.horizontalAlignment = SWT.FILL;
```

Das wäre ein GridData welches dazu führen würde, dass das entsprechende Widget den gesamten verfügbaren Platz seiner Zelle ausnutzt (Horizontal) und dass seine Zelle vergrößert wird, wenn mehr Platz verfügbar wird.


----------



## coffeejava1987 (31. Okt 2011)

Dankeschön.  Mit deinem Tipp habe ich es lösen können. 

Die View-Size habe ich auf maximale Bildschirmgröße gesetzt:


```
public void preWindowOpen() {
		IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
		Rectangle r = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds();
		configurer.setInitialSize(new Point(r.width, r.height));
		configurer.setShowCoolBar(false);
		configurer.setShowStatusLine(false);
	}
	@Override
	public void postWindowOpen() {
		super.postWindowOpen();
		IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
		configurer.getWindow().getShell().setMaximized(true);
	}
```

Gibt es vielleicht eine andere Möglichkeit es mit rein SWT umzusetzen? 
	
	
	
	





```
Rectangle
```
 und 
	
	
	
	





```
GraphicsEnvironment
```
 sind ja AWT...


----------



## coffeejava1987 (3. Nov 2011)

Hey,

auch wenn ich gegen Thread pushen bin.. Vielleicht kann mir ja doch jemand die Frage beantworten.


----------

