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.
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).
zum testen rufe ich lediglich folgenden Code für die Tabelle auf:
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.
Code:
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)
...
Java:
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);
Java:
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);
}