# Anlegen von Columns im TreeTable



## dzim (8. Jun 2010)

Hallo zusammen,

seit einiger Zeit bereits verwende ich eine eigene Klasse für TableLabelProvider, die zusätzlich noch über eine Methode verfügt, generisch Tabellen in TableViewern anzulegen.
Diese ist nicht immer sauber und mittlerweile auch recht aufgebläht, funktioniert aber sowohl für Tabellen mit statischem Layout 
(sprich: Composite -> Tabelle drauf -> LayoutData für die Tabelle festlegen)
als auch Tabellen mit dynamischen Spaltenbreiten
(will heißen Composite -> Tabellen-Composite mit TableColumnLayout und nur der Tabelle drauf -> LayoutDate für das Tabellen-Composite).
Ich verwende mittlerweile fast nur noch die dynamische Variante.

Mein Problem: Ich wollte das jetzt auch mit einem Tree machen, der mehrere Spalten enthält die dynamisch sein sollen, aber ich bekomme jetzt nur noch Fehler.


```
org.eclipse.core.runtime.AssertionFailedException: assertion failed: Unknown column layout data
	at org.eclipse.core.runtime.Assert.isTrue(Assert.java:110)
	at org.eclipse.jface.layout.AbstractColumnLayout.computeTableTreeSize(AbstractColumnLayout.java:127)
	at org.eclipse.jface.layout.AbstractColumnLayout.computeSize(AbstractColumnLayout.java:229)
	at org.eclipse.swt.widgets.Composite.computeSize(Composite.java:219)
	...
```
Irgendwann kommt auch eine meiner Klassen, diese stellt aber stets nur den indirekten Aufrufer meines Composites dar (ich habe ein Composite, das die GUI enthält, binde es in einem Editor ein und rufe den Editor auf - der Fehler erfolgt dann in der Action, die den Editor aufruft).

```
treeComposite = new Composite(this, SWT.NONE);
		tree.setLayout(new TreeColumnLayout());
		FormData fd_treeComposite = new FormData();
		fd_treeComposite.top = new FormAttachment(tableHandlingButton, 5);
		fd_treeComposite.right = new FormAttachment(100, -5);
		fd_treeComposite.left = new FormAttachment(optionsGroup, 0, SWT.LEFT);

		treeViewer = new TreeViewer(treeComposite, SWT.BORDER);
		treeViewer.setUseHashlookup(true);
		tree = recordTreeViewer.getTree();
		tree.setHeaderVisible(true);
		tree.setLinesVisible(true);
```
zum testen rufe ich lediglich folgenden Code für die Tabelle auf:

```
for (int index = 0; index < tableHeaders.length; index++) {

			TreeViewerColumn viewerColumn = new TreeViewerColumn(
					(TreeViewer) viewer, SWT.NONE);
			viewerColumn.getColumn().setWidth(
					this.tableHeaders[index].length() + 150);
			viewerColumn.getColumn().setText(this.tableHeaders[index]);
			viewerColumn.getColumn().setResizable(true);
			viewerColumn.getColumn().setMoveable(true);
		}
```


----------



## dzim (8. Jun 2010)

update

In dem Anlegen des Composites mit dem Tree oben fehlten noch zwei Zeilen

```
fd_treeComposite.bottom = new FormAttachment(persistButton, -5);
		treeComposite.setLayoutData(fd_treeComposite);
```
ausserdem habe ich jetzt noch einmal überprüft, ob es denn überhaupt klappen würde, würde ich ohne den dynamischen Teil arbeiten.
Ergebnis: Ja! - Das ärgert mich jetzt um so mehr...


----------



## dzim (9. Jun 2010)

Hat denn niemand bisher so ein Problem gehabt?


----------

