# JFace TableViewer + ContentProvider, wo sind die Spalten?



## muh (4. Jul 2007)

Moin,

ich glaub so langsam, dass ich nen grundlegendes Verständnisproblem mit jface habe. Woher bekommt nen TableView den Inhalt für seine Spalten? Gibts irgendwo ne anständige doc, die das grundlegende Konzept hinter JFace erklärt? Mir kommts derzeit nämlich unnötig aufgeblasen und irrational stark abstrahiert vor. Leider muss ich es trotzdem verwenden.


----------



## schuetzejanett (4. Jul 2007)

Hallo,

also hier hast du einen tutorial für das erstellen eines tableviewers. vielleicht klärt das ja deine fragen

http://www.eclipse.org/articles/Article-Table-viewer/table_viewer.html


----------



## byte (4. Jul 2007)

Du schreibst Dir einen ContentProvider und einen TableLabelProvider. Ersterer definiert quasi die Zeilen der Tabelle durch die Methode getElements(). Wie eine solche Zeile dann angezeigt wird (also die Spalteninhalte) ist durch den TableLabelProvider und die Methode getColumnText() definiert.


----------



## muh (4. Jul 2007)

Danke, bin durch ein Beispiel dann doch noch drauf gekommen, dass der LabelProvider der ContentProvider ist  Bin wohl der einzige, der die Bezeichnung LabelProvider für nen content controller verwirrend findet ^^ (Label sind für mich im Kontext einer Tabelle die Spaltenüberschriften)


----------



## byte (4. Jul 2007)

Content- und LabelProvider werden ja nicht nur bei TableViewern verwendet, sondern bei allen möglichen Viewern. Der ContentProvider bestimmt, welche Objekte des Modells dargestellt werden und der LabelProvider legt fest, wie diese Objekte dargestellt werden. Nichts anderes passiert hier doch. Verstehe also nicht, was Du daran auszusetzen hast. Finde diese Umsetzung recht sauber und hinsichtlich der Kapselung sinnvoll.


----------



## Gast (4. Jul 2007)

Die Kapselung ist sinnvoll, das stimmt. Aber die Bezeichnung finde ich seltsam. Der "LabelProvider" ist eher ein "ModelViewMapper".


----------



## byte (4. Jul 2007)

Content- und LabelProvider teilen sich ja den Job des Controllers, verbinden also die View mit dem Model. Dabei liefert der ContentProvider halt den Inhalt aus dem Model in Form von Objekten und der LabelProvider liefert die Stringrepräsentationen dieser Objekte. Ich finde die Bezeichnungen durchaus treffend.


----------

