Listener für Fenstergröße (SWT)

Status
Nicht offen für weitere Antworten.

fisch

Aktives Mitglied
Hi

ich würde gerne meine Komponenten anpassen, wenn sich die Größe des Fensters ändert. Leider macht das mein GridLayout nicht automatisch, also habe ich es mit Control-Listener der Shell versucht allerdings reagiert die Methode controlResized() gar nicht auf die Größenveränderung des Fensters.

Kann mir einer sagen wie ich informiert werde wenn sich die Fenstergröße verändert hat.
 
Hallo!

uh, auf keinen fall über listener machen... das funktioniert eh nicht..
dein gridlayout ist dann falsch konfiguriert, bzw. deine griddata der einzelnen
widgets oder container sind nicht auf "größe anpassen" eingestellt:


Code:
                GridData tableData = new GridData();
		
		tableData.grabExcessVerticalSpace = true;
		tableData.verticalAlignment = GridData.FILL;
		tableData.grabExcessHorizontalSpace = true;
		tableData.horizontalAlignment = GridData.FILL;

                //usw.

da musst du sicher noch ein bisschen rumprobieren, aber das anpassen
der größe geht ausschließlich über das Layout.. :wink:
 
Hi

muss das Thema nochmal aufgreifen, konnte es leider heute erst ausprobieren und es funktioniert einfach nicht, irgendwie ist GridLayout ein Buch mit sieben Siegel für mich. Also ich habe folgenden Code

Code:
shell	= SWTUtil.getShell();
		GridLayout grid = new GridLayout();
		grid.numColumns = 2;
		grid.marginHeight = 0;
		grid.marginWidth = 1;
		grid.horizontalSpacing = 1;
		grid.verticalSpacing = 0;
		
		shell.setLayout(grid);
		
		GridData data = new GridData();
		data.grabExcessVerticalSpace = true;
		data.verticalAlignment = GridData.FILL;
		data.grabExcessHorizontalSpace = true;
		data.horizontalAlignment = GridData.FILL;
		
		GridData vSpan = new GridData();
		vSpan.grabExcessVerticalSpace = true;
		vSpan.verticalAlignment = GridData.FILL;
		vSpan.grabExcessHorizontalSpace = true;
		vSpan.horizontalAlignment = GridData.FILL;
		vSpan.verticalSpan = 2;
		
		GridData hSpan = new GridData();
		hSpan.grabExcessVerticalSpace = true;
		hSpan.verticalAlignment = GridData.FILL;
		hSpan.grabExcessHorizontalSpace = true;
		hSpan.horizontalAlignment = GridData.FILL;
		hSpan.horizontalSpan = 2;

CoolBar toolBar	= new CoolBar(shell,SWT.HORIZONTAL);
		toolBar.setLayoutData(hSpan);
		Group imageGroup	= new Group(shell,SWT.CENTER|SWT.SHADOW_ETCHED_IN);
		imageGroup.setLayoutData(data);
		textGroup	= new Group(shell,SWT.CENTER|SWT.SHADOW_ETCHED_OUT);
		textGroup.setLayoutData(vSpan);
		soundGroup	= new Group(shell,SWT.CENTER|SWT.SHADOW_ETCHED_IN);
		soundGroup.setLayoutData(data);

und was ich da angezeigt bekomme ist nichts außer meiner Menüleiste, weil ich der kein LayoutData zugewiesen habe, was mach ich denn da falsch??????? :bahnhof:
 
Hi fisch,

also bei mir funktioniert der code... mit einer kleinen änderung:
das griddata data darf nicht "wiederverwendet werden"... du musst
jedem widget sein eigenes griddata geben...

danach wird bei mir eine shell angezeigt die links 2 group bereiche hat und
rechts einen... alles ändert sich beim resizen, so wie es sich gehört..

zum thema coolbar... solang da keine actions oda sonstiges
drin ist, wird da auch afaik nix angezeigt...

hier mal ein tutorial zum einstieg, vielleicht hilft dir das zum thema windowaufbau
(Menu, Toolbar, Statusline, Actions, etc.) eventuell etwas weiter:

http://www-128.ibm.com/developerworks/opensource/library/os-ecgui1/
http://www-128.ibm.com/developerworks/opensource/library/os-ecgui2/
http://www-128.ibm.com/developerworks/opensource/library/os-ecgui3/

nochmal:

mit ...#setLayout(irgendeinlayout) setzt du dem container (shell ist auch einer!) ein layout...
alle widgets, die du dem container addest, sollten ein layoutdata bekommen,
damit es weiß wie es sich im container verhalten soll... (grabhorizontalsize und solche
geschichten..)

das ganze gilt natürlich auch für containern IN containern!
also z. B. deine Group ist ein container im container...
im parent verhält es sich, wie dein griddata beschreibt...
aber, du musst dann z. b. der group auch wieder ein layout mitgeben (group.setLayout(...)),
damit die widgets in der group sich richtig anpassen können...
und dort brauchen die widgets wieder layoutdatas damit die wissen,
wie sie sich im container (der group) verhalten sollen... undsoweiter...

das ist am anfang garnet soooo trivial.. aba mit etwas übung wird das schon.. 😀

ansonsten heißts bei den layoutmanagern nich die geduld verlieren... :wink:
 
danke das man für jedes element eine eigene GridData benötigt war mir bislang unbekannt, jetzt funktionierts, werd die tutorials mal durcharbeiten und hoffe dann das ichs endlich raff
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben