RCP TableViewer mit EMF

G

Gast2

Gast
Hallo zusammen,

ich habe ein Klasse A in EMF modelliert und mir den Code und den Edit Code erzeugen lassen.

Nun habe ich eine Liste<A> und will die in einem TableViewer anzeigen lassen und haben meinem AItemProvider das Interface ITableItemLabelProvider hinzugefügt und die getColumnText überschrieben.

Den TableViewer erzeuge ich so

Java:
MyItemProviderAdapterFactory adapterFactory = new MyItemProviderAdapterFactory ();
		tableViewer.setLabelProvider(new AdapterFactoryLabelProvider(
				adapterFactory));
		tableViewer.setContentProvider(new AdapterFactoryContentProvider(
				adapterFactory));
		tableViewer.setInput(listAs);

Leider wird in der Tabelle nichts angezeigt. Leider verstehe ich nicht ganz warum brauch ich ein weiteres EMF Model, welches eine Liste beinhaltet???

Weil wenn ich ein weiteres EMF Model mit ListA mit einer 1...* erzeuge dann klappt alles wunderbar.
Was dann quasi so aussieht
Java:
public interface ListA extends EObject {
	EList<A> getAs();

}


Java:
E4ItemProviderAdapterFactory adapterFactory = new E4ItemProviderAdapterFactory();
		tableViewer.setLabelProvider(new AdapterFactoryLabelProvider(
				adapterFactory));
		tableViewer.setContentProvider(new AdapterFactoryContentProvider(
				adapterFactory));
		ListA listA= MyFactory.eINSTANCE.createListA();
		listA.getAs()addAll(listAs);
		tableViewer.setInput(listA);

Aber ich finde es umständlich extra nochmal ein extra Model dafür zu modellieren (nur für die UI), geht das auch anders?
 

Wildcard

Top Contributor
Sollte sich machen lassen in dem du AdapterFactoryContent Provider erweiterst. Veränderungen in der Liste selbst werden allerdings nicht automatisch zur UI aktualisierung führen, weil deine Objekte nicht in einer EList aufgehangen sind.
 
G

Gast2

Gast
Sollte sich machen lassen in dem du AdapterFactoryContent Provider erweiterst. Veränderungen in der Liste selbst werden allerdings nicht automatisch zur UI aktualisierung führen, weil deine Objekte nicht in einer EList aufgehangen sind.

Ja ist es dann besser so ein List Objekt in EMF zu modellieren? Oder was sind deine Efahrungen damit?
 

Wildcard

Top Contributor
Änderst du die Liste denn?
Wenn das Objekt nicht in die Domain passt, würde ich es eigentlich nicht modellieren. Wenn es allerdings viel Arbeit erspart, und in der Domain nicht stört, spricht auch nicht wirklich etwas dagegen. Geschmacksache :)
 

mandypb86

Mitglied
Ich hatte ein ähnliches Problem, weiß nicht, ob das für dich zutrifft, aber ich kanns ja erstmal erklären.

Ich hab 2 Klassen A und B. A ist parent von B. Ich wollte in einer View mit TableViewer nun alle Bs anzeigen lassen und dachte mir auch schön, ich mach mir ne Liste mit den B-Objekten und pack die in den TableViewer. Hab auch ordentliche ITableItemProvider implementiert, getColumnText überschrieben und den ITableItemProvider den supportedTypes hinzugefügt aber die Tabelle blieb leer.

Irgendwann fiel mir dann ein, dass es ja für List<B> auch keine "Weiterleitung" in den AdapterFactoryContent/LabelProvidern gibt, sondern nur für die eigentlichen Klassen A und B. Vermute mal, dass er deshalb gar nicht erst den BItemProvider genutzt hat, weil das input-Objekt war ja List<B>.

Daraufhin hab ich mir nochmal überlegt, was ich da eigentlich darstellen will und im Prinzip sind die Bs ja die Kinder von A. Also hab ich mir ein A-Objekt geholt und das in meinen TableViewer als input gepackt und schon lief alles einwandfrei.

Wie gesagt, ich weiß nicht, wie dein Model aussieht, aber falls deine Klasse A ein Kind von einer Klasse B ist, dann könnte das funktionieren die Parent-Klasse reinzustecken (und ggfs. die restlichen Children zu unterdrücken).

Lieben Gruß

M@ndy
 

Ähnliche Java Themen


Oben