FillLayout und Composite

Status
Nicht offen für weitere Antworten.

Timmi

Mitglied
Ich versuche zwei Button mit FillLayout in einem Composite anzeigen zu lassen. Leider werden sie nicht angezeigt. Was mache ich falsch?




Code:
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

/**
 * @author Timmi
 *
 * created first in project layouts
 */
public class FillLayoutTest2
	{
public static Display myDisplay;	
	
	private void fillLayoutDemo2(Display display)
		{
		myDisplay = display;
		final Shell myShell = new Shell(myDisplay);
		myShell.setText("FillLayout Shell");
		Composite myComposite = new Composite(myShell, SWT.BORDER);
		FillLayout fillLayout = new FillLayout();
		fillLayout.type = SWT.VERTICAL;
		myComposite.setLayout(fillLayout);
		myComposite.setSize(300, 200);
		Button but1 = new Button(myComposite,SWT.PUSH);
		but1.setText("Eins");
		Button but2 = new Button(myComposite,SWT.PUSH);
		but2.setText("Zwei");
	
		myShell.pack();
		myShell.open();
		while (!myShell.isDisposed())
			{
			if (!myDisplay.readAndDispatch())
				myDisplay.sleep();	
			}
		}
	
	
	
	/**
	 * Method main
	 * @param args
	 */
	public static void main(String[] args)
		{
		myDisplay = new Display();
		FillLayoutTest2 flt = new FillLayoutTest2();
		flt.fillLayoutDemo2(myDisplay);

		}

	}
 
Ich habe es ja nur beispielhaft gepostet um das Augenmerk auf den Kern des Problems zu legen. Er lautet weiterhin "FillLayout in einem Composite". In einer Shell ist das ganz easy. Aber wie sieht das ganze in einem allgemeinen Composite aus?
 
also eigentlich geht es genau so... aber in diesem Fall liegt es vielleicht daran, deine Shell kein Layout hat...
 
Also nochmal ganz langsam: in der Shell funktioniert es. Punkt.

Problem: in einer ganz normalen Composite anzeigen lassen.

Danke dir. Vielleicht weiß noch jemand anderes Rat, warum dies nicht funktioniert bzw. was ich falsch mache.
 
FelixB hat gesagt.:
Timmi hat gesagt.:
Also nochmal ganz langsam: in der Shell funktioniert es. Punkt.

dann gib uns doch bitte ein Beispiel, in dem es *nicht* funktioniert...

*Genau dafür* dient das obige Beispiel. Teste es und du weißt, um was es hier geht.

Bevor das hier ein Dialog wird. An die anderen: kennt jemand eine Lösung für mein Problem: FillLayout innerhalb eines allgemeinen *Composite*?
 
Danke Felix. Du hast zu 100% recht.

Was mir jedoch nicht einleuchtet, ist folgendes:

Wieso benötigt die übergeordnete Shell eine FillLayout-Instanz? Die Buttons im Composite werden doch lediglich mit FillLayout angeordent? Kannst du das erklären?
 
also jedes Element, in das du andere Sachen packen willst, benötigt ein Layout.

Wenn du Buttons in einer Shell haben wilst, musst du der Shell ein Layout geben.
Wenn du ein Composite in einer Shell haben willst, musst du der Shell ein Layout geben.

muss kein FillLayout sein, da kannst du nehmen, was du willst. Das hat nichts mit Layouts zu tun, die später noch verwendet werden.

--> In Shell GridLayout mit drei Composites, wobei jedes Composite ein anderes Layout hat, ist durchaus machbar.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben