package de.tutorials;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import org.eclipse.jface.viewers.IBaseLabelProvider;
import org.eclipse.jface.viewers.IContentProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ILazyContentProvider;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TableColumn;
public class JFaceTableViewerExample extends ApplicationWindow {
TableViewer tableViewer;
Model model;
public JFaceTableViewerExample(Shell parentShell) {
super(parentShell);
}
@Override
protected void configureShell(Shell shell) {
super.configureShell(shell);
shell.setSize(640, 480);
}
protected Control createContents(Composite parent) {
Composite composite = new Composite(parent, SWT.NULL);
GridLayout gridLayout = new GridLayout(1, false);
composite.setLayout(gridLayout);
String[] columnNames = new String[] { "COLUMN_A", "COLUMN_B",
"COLUMN_C" };
tableViewer = new TableViewer(composite, SWT.VIRTUAL);
tableViewer.setColumnProperties(columnNames);
TableColumn tableColumn = new TableColumn(tableViewer.getTable(),
SWT.NULL);
tableColumn.setText(columnNames[0]);
tableColumn.setWidth(100);
tableColumn = new TableColumn(tableViewer.getTable(), SWT.NULL);
tableColumn.setText(columnNames[1]);
tableColumn.setWidth(100);
tableColumn = new TableColumn(tableViewer.getTable(), SWT.NULL);
tableColumn.setText(columnNames[2]);
tableColumn.setWidth(100);
tableViewer.setContentProvider(createContentProvider());
tableViewer.setLabelProvider(createLabelProvider());
tableViewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));
tableViewer.getTable().setLinesVisible(true);
tableViewer.getTable().setHeaderVisible(true);
tableViewer.setUseHashlookup(true);
model = (Model) createInput();
tableViewer.setInput(model);
tableViewer.setItemCount(model.getData().size());
Button btnUpdate = new Button(composite, SWT.PUSH);
btnUpdate.setText("update");
btnUpdate.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
long time = System.currentTimeMillis();
model.getData().add(
new Object[] { "A_" + time, "B_" + time, null });
tableViewer.setItemCount(model.getData().size());
}
});
return composite;
}
static class Model {
List<Object[]> data = new CopyOnWriteArrayList<Object[]>();
public List<Object[]> getData() {
return data;
}
}
private Object createInput() {
Model model = new Model();
model.data.add(new Object[] { "A_0", "B_0", null });
return model;
}
class TableLabelProvider implements ITableLabelProvider {
public Image getColumnImage(Object element, int columnIndex) {
return null;
}
public String getColumnText(Object element, int columnIndex) {
return ((Object[]) element)[columnIndex].toString();
}
public void addListener(ILabelProviderListener listener) {
}
public void dispose() {
}
public boolean isLabelProperty(Object element, String property) {
return false;
}
public void removeListener(ILabelProviderListener listener) {
}
}
private IBaseLabelProvider createLabelProvider() {
return new TableLabelProvider();
}
class ContentProvider implements ILazyContentProvider,
IStructuredContentProvider {
Model model;
public Object[] getElements(Object inputElement) {
return this.model.data.toArray();
}
public void dispose() {
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
System.out.println("inputChanged");
this.model = (Model) newInput;
}
public void updateElement(int index) {
Object[] row = model.getData().get(index);
row[2] = row[0] + " " + row[1];
tableViewer.replace(row, index);
}
}
private IContentProvider createContentProvider() {
return new ContentProvider();
}
/**
* @param args
*/
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
JFaceTableViewerExample example = new JFaceTableViewerExample(shell);
example.setBlockOnOpen(true);
shell.pack();
example.open();
}
}