Hallo liebe Gemeinde,
Ich möchte in einer Table (über ein TableViewer erstellt) ein eigenes Composite einfügen und darstellen.
(Ein GridLayout mit einem Textlabel + Icon in auf der linken Seite der Cell, auf der rechten Seite in der oberen Zeile ein Label mit Text und in der unteren ebenso)
Soweit klappt es auch über ein TableEditor die Cell mit den Daten zu befüllen.
Nur stehe ich nun vor 2 Problemen:
Zum einen wird die Cell(bzw ja gesamte Row) nicht dynamisch an die benötigte Höhe angepasst, so geht ein Teil der Composite verloren.
Zum Anderen, ist der Bereich nun auch nicht mehr "im Gesamten", sprich als Selection innerhalb der Table anwählbar.
Daher die Fragen:
- Wie kann ich dafür sorgen das die Cell in ihren Dimensionen so angepasst wird, das der gesamte Content einer Cell sichtbar ist (oder man zumindest scrollen kann)
- Wie kann ich dafür sorgen, das eine Selection auf dem Composite an die Table weiter geleitet wird als würde ich die Row ganz normal auswählen?
Vielen Dank im Voraus.
Anhängend meine Code-Schnipsel:
erstellen der Table:
Und die Update Methode des CellLabelProviders:
Beste Grüße
Ich möchte in einer Table (über ein TableViewer erstellt) ein eigenes Composite einfügen und darstellen.
(Ein GridLayout mit einem Textlabel + Icon in auf der linken Seite der Cell, auf der rechten Seite in der oberen Zeile ein Label mit Text und in der unteren ebenso)
Soweit klappt es auch über ein TableEditor die Cell mit den Daten zu befüllen.
Nur stehe ich nun vor 2 Problemen:
Zum einen wird die Cell(bzw ja gesamte Row) nicht dynamisch an die benötigte Höhe angepasst, so geht ein Teil der Composite verloren.
Zum Anderen, ist der Bereich nun auch nicht mehr "im Gesamten", sprich als Selection innerhalb der Table anwählbar.
Daher die Fragen:
- Wie kann ich dafür sorgen das die Cell in ihren Dimensionen so angepasst wird, das der gesamte Content einer Cell sichtbar ist (oder man zumindest scrollen kann)
- Wie kann ich dafür sorgen, das eine Selection auf dem Composite an die Table weiter geleitet wird als würde ich die Row ganz normal auswählen?
Vielen Dank im Voraus.
Anhängend meine Code-Schnipsel:
erstellen der Table:
Java:
TableColumnLayout layout = new TableColumnLayout();
this.setLayout(layout);// "this" ist ein einfaches Composite auf dem die Table angezeigt wird.
TableViewer viewer = new TableViewer(this, SWT.MULTI);
// ContentCol ist die Column dessen Cells mit dem "speziellen" Composite ausgerüstet werden soll
contentCol = new TableViewerColumn(tableViewer, SWT.NONE);
layout.setColumnData(contentCol.getColumn(), new ColumnWeightData(100, 50, true));
tableViewer.setContentProvider(new ArrayContentProvider());
Table table = tableViewer.getTable();
table.setHeaderVisible(false);
table.setLinesVisible(true);
Und die Update Methode des CellLabelProviders:
Java:
public void update(ViewerCell cell) {
TableItem item = (TableItem) cell.getItem();
Composite cellPane = new Composite(tableViewer.getTable(), SWT.NONE);
cellPane.setLayout(new FillLayout());
MyContent list = (MyContent) item.getData();
Composite paneForContent = new Composite(cellPane, SWT.NONE);
paneForContent.setLayout(new GridLayout(2, false));
Label lblIconText = new Label(paneForContent, SWT.NONE);
lblIconText.setText(list.getMyContentName());
lblIconText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true, 1, 2));
// bisher wird noch kein icon hinzugefügt
Label lblText1 = new Label(paneForContent, SWT.NONE);
lblText1.setText(list.getParkName());
lblText1.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true, 1, 1));
Label lblText2 = new Label(paneForContent, SWT.NONE);
lblText2.setText(list.getPowerUnitName());
lblText2.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true, 1, 1));
TableEditor editor = new TableEditor(tableViewer.getTable());
editor.grabHorizontal = true;
editor.grabVertical = true;
editor.setEditor(cellPane, item, cell.getColumnIndex());
editor.layout();
}
});
Beste Grüße