How do I add a multi-column row to a TableViewer? [message #1842865] |
Sat, 03 July 2021 18:27  |
Eclipse User |
|
|
|
I am trying to get a simple example working to start with, two columns with each row an array of 2 strings. Below is the result of studying a number of examples and the API javadoc. The TableItem consisting of {"display", "<expression>"} exists in the table but does not appear in the view. How is a row added to a TableView?
@Override
public void createPartControl(Composite parent) {
viewer = new TableViewer(parent, SWT.FULL_SELECTION);
Table viewerTable = viewer.getTable();
viewerTable.setLayoutData(new GridData(GridData.FILL_BOTH));
TableViewerColumn kindCol = new TableViewerColumn(viewer, SWT.LEFT);
kindCol.setLabelProvider(new CellLabelProvider() {
@Override
public void update(ViewerCell cell) {
// This is never called
}});
TableViewerColumn textCol = new TableViewerColumn(viewer, SWT.RIGHT);
textCol.setLabelProvider(new CellLabelProvider() {
@Override
public void update(ViewerCell cell) {
// This is never called
}});
// viewerTable.getColumnCount() == 2 at this point
String[] rowTextArray = new String[] {"display", "<expression>"};
TableItem tableRow = new TableItem(viewerTable, SWT.NONE);
tableRow.setData(rowTextArray);
// tableRow.getText() is always a single String, maybe a row label?
// viewerTable.getItems().length == 1
// viewerTable.getItem(0).getData() == rowTextArray
// Various attempts of this kind result in NPEs deep in the framework.
// Why does TableViewer#setInput require a parameter? Others don't.
// viewer.setContentProvider(new IStructuredContentProvider() {
// @Override
// public Object[] getElements(Object inputElement) {
// return rowText;
//// return listRowText;
//// return new TableItem[] {tableRow};
//// return viewerTable.getItems();
//// }});
// viewer.setInput(rowText);
// viewer.setInput(allRows);
// viewer.setInput(listRowText);
// viewer.setInput(tableRow);
}
|
|
|
|
Re: How do I add a multi-column row to a TableViewer? [message #1842870 is a reply to message #1842868] |
Sun, 04 July 2021 11:52  |
Eclipse User |
|
|
|
Thanks! That put me on track. I did need to nest rowTextArray,
String[] rowTextArray = new String[] {"display", "<expression>"};
Object[] tableWithOneRow = new Object[] {rowTextArray};
viewer.setInput(tableWithOneRow);
Next step is to associate cell editors with each column. The Javadoc for ArrayContentProvider says it "handles the case where the viewer input is an unchanging array or collection of elements." I'm assuming that means if the structure-of-arrays stay the same then I can replace an element in rowTextArray and just do a refresh.
|
|
|
Powered by
FUDForum. Page generated in 0.05481 seconds