[SWT] Größe eines Composites bestimmen

rohrbold

Mitglied
In meiner Anwendung befindet sich ein relativ kompliziertes GridLayout in dem sich zwei Tabellen auf der rechten Seite über einen großen Raum erstrecken. Mittels eines ScrolledComposite habe ich immerhin dank Tom die beiden schonmal scrollbar hinbekommen. Nur frage ich mich, ob es eine Möglichkeit gibt, wie man die Länge der beiden Tabellen, bzw. der Composites in denen sie sich befinden, etwas kürzen kann, da sie subjektiv zu viel Platz einnehmen.
Daher meine Frage: Gibt es eine Möglichkeit, in einem GridLayout die Höhe eines Composites effektiv zu begrenzen? Bei meinem ScrolledComposite wird die Angabe setSize() leider ignoriert.

Martin
 
SWT: Problem bei Composite mit V_Scroll
rohrbold hat gesagt.:
S
Leider konnte ich bisher in den beiden Büchern zu SWT, die ich mir gekauft habe ("Java Native Interfaces with SWT/JFace" und "SWT: The Standard Widget Toolkit - Volume 1"), kein Wort zu dem ScrolledComposite finden. Vielleicht kam das erst danach?!

Vielen Dank auf jeden Fall.
Martin
Hi,

Meiner Erfahrung nach geht es nicht, wenn Du setSize(..) bei den Composites oder ScrolledComposite und den SWT-GridLayoutmanager verwendest.

Imho das Buch SWT: The Standard Widget Toolkit - Volume 1 ist sehr enttäuschent. Aber im Kapitel Layouts, glaub letztes Unterkapitel, steht über GridLayout drin dass es den Platz automatisch berechnet und man keine Größenangaben machen kann, so oder so ähnlich - ich poste es mal morgen.

"The Definitive Guide to SWT and JFace" enthält was zu Scrolledcomposite bzw. es wird auch JFace behandelt, wurde hier schon ein paar mal empfohlen von einem "Java Guru" (Sorry Name entfallen, aber war nicht Thomas oder Snape sondern der andere der öfters Antwortet ).

Weiter kann ich nur den Link empfehlen den mal Thomas gepostet hat SWT&JFace Examples.

Gruß

Luxor
 
Habe das Problem mittlerweile gelöst. Mittels heightHint kann man dem Layout (im GridData) einen Größenvorschlag machen. Bei meinem ScrolledComposite sc1 wäre das wie folgt:
Code:
GridData gridData1 = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
gridData1.heightHint = 400;
sc1.setLayoutData(gridData1);

Ein Minimalbeispiel wäre hier mal gegeben:

Code:
package de.tutorials;

import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;

public class GroesseSetzen {
	
	protected static	Shell 				shell;
	
	public static void main(String[] args) {
		Display display = new Display ();
		shell = new Shell(display);
		shell.setLayout(new GridLayout());
		
		 final ScrolledComposite sc1 = new ScrolledComposite(shell, 
		    		SWT.V_SCROLL | SWT.BORDER);
		    sc1.setExpandHorizontal(true);
		    sc1.setExpandVertical(true);
		    Table tabelleWasserstand = new Table(sc1, SWT.NONE);
		    tabelleWasserstand.setHeaderVisible(true);
		    tabelleWasserstand.setLinesVisible(true);
		    TableColumn spalteWasserstand = new TableColumn(tabelleWasserstand, SWT.NONE);
		    spalteWasserstand.setText("Wasserstand");
		    TableColumn spalteKstWert = new TableColumn(tabelleWasserstand, SWT.NONE);
		    spalteKstWert.setText("Kst-Wert");
		    TableColumn spalteKstBlock = new TableColumn(tabelleWasserstand, SWT.NONE);
		    spalteKstBlock.setText("Kst-Block");
		    for(int i = 0; i < 27; ++i) {
		    	TableItem item = new TableItem(tabelleWasserstand, SWT.NULL);
		    	for(int j = 0; j < 3; ++j) {
		    		item.setText(j, "Item " + i + "-" + j);
		    	}
		    }
		    for(int i = 0; i < 3; ++i) {
		    	TableColumn column = tabelleWasserstand.getColumn(i);
		    	column.pack();
		    }
		    tabelleWasserstand.pack();
		    sc1.setContent(tabelleWasserstand);
		    GridData gridData1 = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
		    gridData1.heightHint = 400;
		    sc1.setLayoutData(gridData1);

		    shell.pack();
		    shell.open();
		    while (!shell.isDisposed()) {
		      if (!display.readAndDispatch())
		    	  display.sleep();
		    }
		    shell.dispose();
	}
}
 

Neue Beiträge

Zurück