此图能够充分说明TableViewer的工作过程。
写上例子就太棒了。
例子:
public class TableViewerExample {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setBounds(100,100,400,200);
shell.setLayout(new FillLayout());
final TableViewer tv = new TableViewer(shell,SWT.NONE);
Table t = tv.getTable();
t.setHeaderVisible(true);
t.setLinesVisible(true);
String[] colName = {"First Name","Last Name","Age", "Num Children"};
int[] colWidth = {80,100,35,100};
for(int i=0; i<colName.length; i++) {
TableColumn tc = new TableColumn(t,SWT.NONE);
tc.setText(colName[i]);
tc.setWidth(colWidth[i]);
}
tv.setLabelProvider(new PersonTableLabelProvider());
tv.setContentProvider(new ArrayContentProvider());
tv.setInput(Person.example());
shell.open();
while(!shell.isDisposed()) {
if(!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
class Person {
public String firstName = "John";
public String lastName = "Doe";
public int age = 37;
public Person[] childern = new Person[0];
public Person(String firstName, String lastName, int age) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
public Person(String firstName, String lastName, int age, Person[] childern) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.childern = childern;
}
public static Person[] example() {
return new Person[] {
new Person("Dan", "Rubel",41,new Person[] {
new Person("Beth", "Rubel",11),
new Person("David", "Rubel",6),
}),
new Person("Eric", "Clayberg",42,new Person[] {
new Person("Lauren", "ClayBery",41),
new Person("Lee", "ClayBery",41),
}),
new Person("Mike", "Taylor",41),
};
}
public String toString() {
return firstName +" "+ lastName;
}
}
class PersonTableLabelProvider extends LabelProvider implements ITableLabelProvider {
public Image getColumnImage(Object element, int columnIndex) {
return null;
}
public String getColumnText(Object element, int columnIndex) {
Person person = (Person) element;
switch(columnIndex) {
case 0: return person.firstName;
case 1: return person.lastName;
case 2: return person.age+"";
case 3: return person.childern.length+"";
default: return "unknown"+columnIndex;
}
}
}