Problem beim neuanlegen von Composites

dzim

Top Contributor
Hi zusammen,

ich habe bereits vor einiger Zeit eine Art Wizard konstruiert (ich brauchte mal was, was in einem Editor ausgeführt werden kann und nicht als Wizard-Dialog - über Sinn und Unsinn lässt sich sicher streiten, aber er funktioniert augenscheinlich relativ gut).
Seit einigen Tagen versuche ich ihn noch etwas zu erweitern, was leider nur von mäßigen Erfolg gekrönt ist:
Jede Page und der Wizard selbst können einen Name haben (wenn man ihn nicht setzt, wird je ein Default-Wert verwendet).
Ich möchte nun - vergleichbar mit dem Diagramm-Wizard von OpenOffice (der einzige, der mir gerade einfällt) - auf der Seite einen Überblock über den Inhalt (also die Seiten) des Wizards geben und die aktive Seite hervorheben, bzw. auch die, die noch nicht erreichbar sind markieren (rote Schrift oder so).

Ich habe das Ganze über eine SashForm gemacht und für eine Einzelne Seite, wird der Name des Wizards und der Seite bereits ordentlich angezeigt. Aber:
Ich möchte das Composite (=Client-Area in einer Section, welche in einem ScrolledForm steckt) bei jedem hinzufügen einer Seite (was von der API her halt auch "während des Betriebs" möglich ist), bei jedem Wechsel der Seite, oder jeder Statusänderung einer Seite (ob man zu nächsten weiter gehen kann oder nicht), neu darstellen.

Dazu mache ich folgendes:
Java:
	private void createOverviewContent() {

		// create a new content section composite
		overviewContentComposite = new Composite(overviewContentSection,
				SWT.NONE);

		// adapt composite to forms
		formToolkit.adapt(overviewContentComposite);
		formToolkit.paintBordersFor(overviewContentComposite);

		// create the client-area of the section
		overviewContentSection.setClient(overviewContentComposite);
		overviewContentComposite.setLayout(new FormLayout());

		// the last label, used to attach ne next one
		Label lastLabel = null;
		for (int i = 0; i < pages.size(); i++) {

			// used to mark the current page
			boolean currentPage = false;
			if (((StackLayout) contentComposite.getLayout()).topControl == pages
					.get(i).getTopComposite()) {
				currentPage = true;
			}

			// create the text for the label...
			String text = (i + 1)
					+ ") "
					+ (pages.get(i).pageName != null ? pages.get(i).pageName
							: "page " + (i + 1));
			// ... and create it
			Label label = formToolkit.createLabel(overviewContentComposite,
					text, SWT.WRAP);

			// attachment via FormLayout --> don't know if this is a good approach at all
			FormData fd_label = new FormData();
			if (i == 0) {
				fd_label.top = new FormAttachment(0, 5);
			} else {
				if (lastLabel != null) {
					fd_label.top = new FormAttachment(lastLabel, 5, SWT.BOTTOM);
				}
			}
			fd_label.left = new FormAttachment(0, 5);
			fd_label.right = new FormAttachment(100, -5);
			label.setLayoutData(fd_label);

			// set the coloring
			if (currentPage) {
				if (pages.get(i).canProceed) {
					label.setForeground(SWTResourceManager.getColor(0, 0, 0));
				} else {
					label.setForeground(SWTResourceManager.getColor(255, 0, 0));
				}
				label.setBackground(SWTResourceManager.getColor(0, 204, 0));
			} else {
				if (pages.get(i).canProceed) {
					label.setForeground(SWTResourceManager.getColor(0, 204, 0));
				} else {
					label.setForeground(SWTResourceManager.getColor(255, 0, 0));
				}
			}

			// remember the last label (for the form-data)
			lastLabel = label;
		}

		// force an update of the composite and it's parent
		// i guess there is something wrong here...
		overviewContentComposite.update();
		overviewContentComposite.getParent().layout(
				new Control[] { overviewContentComposite });
	}

Ich habe es so weit bereits durchgetestet: die Methode wird an allen fraglichen Stellen aufgerufen (in diversen Listenern etc.).
Ein Effekt ist aber leider bislang ausgeblieben.

Wenn jemand sieht, wo ich da vielleicht auf der Stelle trete...

Vielen Dank und Gruß
Daniel
 

Wildcard

Top Contributor
Dein Problem ist das diese 'overview' nicht richtig aktualisiert wird?
Sections sind nicht dafür gedacht das du ihnen n Controls hinzufügst (du erstellst ja jedesmal ein neues Composite).
Mach doch ein Composite in die Section, setze es als Client. Dieses Composite nutzt du als Parent für deinen Variablen Inhalt.
1. Änderung passiert
2. Du disposed den aktuellen Inhalt (wichtig)
3. Du erzeugst den neuen Inhalt auf dem Composite
4. Du rufst Layout auf der Section auf
 

Wildcard

Top Contributor
Übrigens, hast du dir mal MasterDetailsBlock angesehen? Das entspricht wohl in etwa dem Paradigma das du dir vorstellst und nimmt Arbeit ab.
 

dzim

Top Contributor
Zu deiner ersten Antwort: ja, diese overview wird nicht richtig aktualisiert.
Mit "overviewContentSection.setClient(overviewContentComposite);" (Zeile 12) dachte ich, dass ich es bereits als Inhalt setze - die Labels, die die Darstellung der aktuellen Seite etc übernehmen sollen, werden auf diesem Composite dargestellt - wenigstens in der Theorie.
Was ich aber tatsächlich nicht gemacht habe, ist das disposen der bereits vorhandenen Elemente... Vielleicht ist dass das Problem und ich geh es schon wieder viel zu kompliziert an!

Ja, ich hab schon mal mit dem Master-Details-Block herumgespielt (auch wenn ich, ehrlich gesagt, nie etwas im Endeffekt damit konstruiert hab, was auch funktioniert hätte ;-) )
Ich weiß aber nicht, ob der MDB hier genau das richtige ist, da ich in meinem Wizard - vergleichbar zu der aufklappenden Hilfe in einigen Dialogen/echten Wizards - dort (wenn man so will im "Detail") zwar immer Forms verwende, aber im eigentlichen "Master", was nix weiter als ein einfaches Composite mit StackLayout, auch Nicht-Forms verwendet werden können.
Ich steck im MDB nicht so tief drin, daher weiß ich nicht, ob ihm das egal ist oder nicht!
 

dzim

Top Contributor
WTF!!!
Wildcard! Ich könnt mir selbst in den Arsch beißen! Du hattest recht!
Ich frag mich, warum ich da nicht mal selbst drauf komme!

Disposen, Content neu anlegen, layout forcieren und fertig!

Danke, danke, danke!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
dzim OSGi Problem beim Verwenden von Declaratice Services Plattformprogrammierung 18
M Problem beim Zugriff auf Klasse aus Fragment in einem anderen Plugin Plattformprogrammierung 3
K Problem bei Einbinden einer DLL in Java-Projekt Plattformprogrammierung 4
Wurstsemmel RCP SWT-Problem: Programm sucht Cocoa-Bibliothek unter Windows Plattformprogrammierung 6
Shams Antbuild - Problem bei OSGi Anfängertutorial Plattformprogrammierung 0
D Problem mit eclipse Plattformprogrammierung 2
J JNA Implimentierungs Problem Plattformprogrammierung 0
Shams Problem bei der Knopflerfischinstallation Plattformprogrammierung 2
J Charset-Problem nach Plugin-Export Plattformprogrammierung 1
TheWhiteShadow RCP Problem mit Plugin Interaktion Plattformprogrammierung 6
D Eclipse_Visual Editor Problem Plattformprogrammierung 2
J Eclipse Plug-In für UML-Diagramme Problem Plattformprogrammierung 4
O Eclipse Plugin - Einfachstes Problem, das es gibt. Plattformprogrammierung 2
T netbeans problem? Plattformprogrammierung 4
dzim RCP Problem mit MenuManager Plattformprogrammierung 3
H RCP Problem mit Extension Schema Plattformprogrammierung 10
R JFace Databinding Problem Plattformprogrammierung 5
F Ecilpse plugin und MWE Workflow: classpath Problem Plattformprogrammierung 12
W Wahrscheinlich triviales Problem, aber komm nicht weiter Plattformprogrammierung 7
K SelectionListener / SelectionProvider Problem Plattformprogrammierung 2
M Xpand Anfäger Problem Plattformprogrammierung 3
K Eclipse RCP, EMF, Hibernate Problem Plattformprogrammierung 7
dzim RCP Problem mit Umsetzen des Workspace unter Win Plattformprogrammierung 4
B PreferencesService Problem Plattformprogrammierung 2
K EMF/Teneo EMap Problem Plattformprogrammierung 6
K Problem mit EMF/Teneo, GregorianCalendar, Date, Hibernate Timestamp Plattformprogrammierung 6
L RCP TreeViewer Listener Problem Plattformprogrammierung 12
C target platform problem Plattformprogrammierung 2
K NoClassDefFoundError Problem Plattformprogrammierung 24
F Eclipse: Plug-In mit Ecoding Problem Plattformprogrammierung 7
O Problem mit relativen Pfaden in einem RCP-Plugin Plattformprogrammierung 5
hdi Problem bei Eclipse Plugin Export Plattformprogrammierung 9
K Bild Problem in exportierter RCP Anwendung Plattformprogrammierung 5
D Problem mit Synth Painter und OSGi (Equinox) Plattformprogrammierung 8
G plugin.xml Problem Plattformprogrammierung 4
I SWT Popup-Menu Problem (Position) Plattformprogrammierung 4
M Eclipse Probleme beim Ausführen eines Programms Plattformprogrammierung 3
G Nullpointer im Debugger, jedoch nicht beim normalen Starten Plattformprogrammierung 12
W Eclipse vergißt beim Exportieren Resources-Ordner Plattformprogrammierung 11
C Eclipse: Notification beim umbennen von Methoden? Plattformprogrammierung 4
M OSGi Probleme / Unklarheiten beim laden von DLL's Plattformprogrammierung 4
L RCP Exception beim Ausführen von BIRT Application Plattformprogrammierung 2
Mike90 Error beim Öffnen einer RCP-App Plattformprogrammierung 2
W SWTException beim Schließen einer ViewPart Plattformprogrammierung 13
M EMF Model Transaction Fehler beim Updaten eines Graphiti-Pictogramms Plattformprogrammierung 2
L RCP Detached View beim Starten des RCPs? Plattformprogrammierung 3
lumo RCP Beim wechsel der Perspektive automatisch Views aktivieren Plattformprogrammierung 6
X b3 aggregator - Erfahrungen beim spiegeln von p2 Update Sites Plattformprogrammierung 10
jemandzehage Kurze Fehlernachricht beim starten in Eclipse Plattformprogrammierung 5
dzim Veränderte Abhängigkeiten beim Umstieg von 3.5.2 auf 3.6.1 Plattformprogrammierung 9
J RCP, Fehler beim MultiPageEditor, Widget is disposed Plattformprogrammierung 4
G Probleme beim Export Plattformprogrammierung 2
S Plugin: View beim Button-Klick austauschen Plattformprogrammierung 7
K Keine EXE beim Export Plattformprogrammierung 10
M Teilweise Probleme beim Updaten von Plugins Plattformprogrammierung 3
S Versionsprobleme beim Erstellen eines Plugins Plattformprogrammierung 6
S View speichern/laden beim schließen Plattformprogrammierung 14
B Simple Action beim Speichern in Eclipse... Plattformprogrammierung 2
N Beim starten addPartListener() benutzen Plattformprogrammierung 2
dzim Nerviges Gepiepe beim Nutzen von KeyListenern & Scrollbare Composites Plattformprogrammierung 2
dzim java.lang.ClassNotFoundException beim laden eines Plugins Plattformprogrammierung 10
T [RCP] Was passiert genau beim laden eines Plugins? Plattformprogrammierung 4
dzim Fehler beim starten eines Produkts Plattformprogrammierung 5
V Eclipse RCP Encoding beim Export Plattformprogrammierung 4
V Ich brauche hilfe beim Eclipse RCP Export Plattformprogrammierung 8

Ähnliche Java Themen

Neue Themen


Oben