anfänger braucht hilfe - composite oder shell oder beides?

Tinobee

Mitglied
hallo leute, ich habe ein verständnisproblem bzgl. gui building mit swt. und zwar hab ich jetzt grad diese gui. jetzt möchte ich, dass sich alles weitere leben z.b. die darstellund eines geparsten xml files oder die abfragemaske für benutzerdaten oder der table tree immer in einem neuen composite abspiel - grad so wie bei einem install-wizard, wo wenn man auf "weiter" drückt, immer ein neuer inhalt im selben fenster erscheint.

ich weiß aber nicht, ob das jedes mal eine neue shell ist oder ein neues composite. wenn es eine neue shell ist, von der man ja angeblich beliebig viele erstellen kann, und die ja eigentlich alle elemente beinhalten soll, wie macht man das, dass man jede neue shell, die ja in verschiedenen klassen bzw. objekten angelegt werden soll, an dem einen display "anmelden" kann? denn es darf ja nur ein display geben.

wenn es ein neues composite ist, wie muss ich dann weiter vorgehen? brauch ich auch jedes mal eine neue shell, die das neue composite beinhaltet? wenn ja, komme ich zur vorherigen frage zurück. wenn nein, wie macht man es?

ich wäre für anfängergerechte antworten sehr dankbar, da die tutorials und anleitungen bzgl. swt reichlich spärlich sind. vielleicht hat auch jemand ein tutorial an der hand, wo man solche erweiterten gui-fragen detailliert abhandelt?

vielen dank schonmal im voraus!

tinobee
 
Zuletzt bearbeitet:
Hallo ich bin's ...

also, wenn Du ein neues Fenster öffnen möchtest brauchst du eine neue Shell (Dialog Shell)
und wenn Du etwas in dem Fenster mit einbauen möchtest entweder ein neues Composite, Group, usw oder Du löst das über das Layout.
Ganz nette Beispiele für SWT find ich immer unter
http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/CatalogSWT-JFace-Eclipse.htm
oder direkt bei Eclipse mal die Widgets
http://www.eclipse.org/swt/widgets/
testen.
Ich hoffe ich konnte Dir damit weiterhelfen :)
 
hallo und danke für deinen beitrag,

die empfohlenen links sind schon in meinen bookmarks. da habe ich auch verschiedene ideen her. problem ist jedoch, dass die samples, die ich mir angesehen habe, alle eine eigne main-methode haben. ich hab meine main methode jedoch in einer eigenen klasse, die beim programmstart zuerst die gui aufruft, welche dann ihrerseits wieder alle benötigten klassen (objekte) für den ersten "aufritt" aufruft und darstellt. ich möchte die verschiedenen komponenten meiner anwendung gern objektorientiert in einzelne klassen (objekten) auslagern und stehe dabei jedes mal vor dem problem, dass wenn ich eine neue shell anlege, diese ja beim display der gui-klasse angemeldet werden muss und ich nicht weiß, wie das geht über die objektgrenze hinweg. es darf doch insgesamt nur ein display geben. dieses ist schon in meiner klasse gui angelegt. es bleibt also nach wie vor die frage, wie mache ich es richtig, 3 verschiedene klassen (benutzereingabe, tabelle, textdarstellung) mit ihren ganzen komponenten mit einer eigenen shell zu versehen (so dies der richtige ansatz ist und nicht stattdessen ein composite genommen werden muss) und diese dann bei meiner klasse gui anzumelden sprich Shell shell = new shell (display). und was hat es mit dem "parent" auf sich, das man in den snippets oft liest?

bislang ist mir die direkte kommunikation einer shell nur gelungen, wenn sie entweder in derselben klasse vorkommt oder in einer abgeleiteten. ich seh den wald irgendwie vor lauter bäumen nicht.:confused:
 
Zuletzt bearbeitet:
Hallo ich bin's ...

das ist alles OK und sieht ganz nach objektorientierter Programmierung aus :)
Du solltest jetzt nur noch deine Objekte auch an die Unterklassen übergeben, da sie sich sonst nicht bei dem Dispplay anmelden können.
=> Hauptklasse erstellt neue Haupt-Shell (kann auch eine Dialogshell sein, z.B. Splashscreen :) aber erstmal eins nach dem andern)
=> Hauptshell stellt Methoden bereit um neue Shells (Dialogshell) zu öffnen.
=> An die Methoden wird als Parameter die Hauptshell übergeben oder nur das Display.
(Du kannst auch nur die Klasse übergeben und diese dann mit einem Getter für das Display ausstatten)
=> Die Methode öffnet eine neue Shell

Das parent (Elternteil oder Vorgänger) wie schon der Name sagt ist die Elternklasse, von der sich die Kinderklassen die übergeordneten Elemente holen können.
In Deinem Fall also das Display.

In Deiner Dialogshell-Klasse könnte das dann ungefähr so aussehen:
Code:
public class DialogShell
{
	private Shell dialogShell;

	public DialogShell(Shell hauptshell)
	{
		this.dialogShell = new Shell(hauptshell.getDisplay());
	}

	public void open()
	{
		this.dialogShell.setText("Dialogshell - Titelzeile");
		this.dialogShell.setSize(300, 300);

		this.dialogShell.open();

		while (!this.dialogShell.isDisposed())
		{
			if (!this.dialogShell.getDisplay().readAndDispatch())
			{
				this.dialogShell.getDisplay().sleep();
			}
		}

		this.dialogShell.dispose();
	}

}

Ich hoffe ich konnte Dir damit weiterhelfen.
 
ich will das nicht so ganz reaktionslos stehen lassen, drum sag ich an dieser stelle erstmal: ich probiers aus und gebe demächst nochmal rückmeldung....

vorerst danke für den tip!

gruß, tino
 
Zurück