一. 创建表格
1. setContentProvider 主要功能:把数据转换为表格需要的数据模型,这里转换为数组。
2. setLabelProvider 主要功能:设置每个单元格显示的文本和图片。
3. setInput 主要功能:提供数据
整体上的工作过程是:setInput()提供数据,setContentProvider()把setInput()提供的数据转换为表格能用的数据类型:数组,setLabelProvider()把这些数据按照我们想要的形式显示出来。他们三者遵照MVC思想。
二. 看代码例子,如下:
shell = new Shell(getParent(), getStyle());
shell.setSize(504, 346);
center();
shell.setText(Messages.getString("exp.common.dialog.query"));
text = new Text(shell, SWT.BORDER);
text.setBounds(101, 27, 196, 19);
Label label = new Label(shell, SWT.NONE);
label.setAlignment(SWT.RIGHT);
label.setBounds(47, 30, 48, 13);
label.setText(Messages.getString("exp.common.dialog.emp.code"));
tableViewer = new TableViewer(shell, SWT.BORDER | SWT.FULL_SELECTION);
table = tableViewer.getTable();
tableViewer.setContentProvider(new GridContentProvider()); // 这里使用了setContentProvider
tableViewer.setLabelProvider(new DriverGridLabelProvider()); // 这里使用了setLabelProvider
// 表格双击事件:当双击table的某一行数据时,该行数据作为选择数据,返回到父窗口
table.addMouseListener(new MouseAdapter() {
@Override
public void mouseDoubleClick(MouseEvent e) {
TableItem tad[] = table.getSelection();
if (tad.length > 0) {
String str[]=new String[2];
str[0]=tad[0].getText(0);
str[1]=tad[0].getText(1);
result = str;
shell.close();
}
}
});
table.setBounds(47, 71, 424, 187);
table.setHeaderVisible(true);
table.setLinesVisible(true);
TableColumn tblclmnid = new TableColumn(table, SWT.CENTER);
tblclmnid.setWidth(100);
tblclmnid.setText(Messages.getString("exp.common.dialog.driver.code"));
TableColumn tableColumn_1 = new TableColumn(table, SWT.CENTER);
tableColumn_1.setWidth(240);
tableColumn_1.setText(Messages.getString("exp.common.dialog.driver.name"));
/**
* 初始化table数据
*/
this.tableViewer.setInput(this.lstDrivers);
// 这里提供数据setInput, 同时出发方法:getElements 和 getColumnText 方法。
public class GridContentProvider implements IStructuredContentProvider{
@SuppressWarnings("unchecked")
public Object[] getElements(Object inputElement) {
if(inputElement instanceof List){
return ((List)inputElement).toArray();
}else{
return new Object[0];
}
}
public void dispose() {
// TODO Auto-generated method stub
}
public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
// TODO Auto-generated method stub
}
}
public class DriverGridLabelProvider implements ITableLabelProvider{
private static final Log logger = LogFactory.getLog(DriverGridLabelProvider.class);
public Image getColumnImage(Object element, int columnIndex) {
return null;
}
public String getColumnText(Object element, int columnIndex) {
try{
if (element instanceof Driver){
Driver item = (Driver)element;
if(columnIndex == 0){
return StringUtils.stripToEmpty(item.getDriverNo());
}else if(columnIndex == 1){
return StringUtils.stripToEmpty(item.getName());
}
}
}catch(Exception e){
logger.error(e);
}
return null;
}
public void addListener(ILabelProviderListener arg0) {
// TODO Auto-generated method stub
}
public void dispose() {
// TODO Auto-generated method stub
}
public boolean isLabelProperty(Object arg0, String arg1) {
// TODO Auto-generated method stub
return false;
}
public void removeListener(ILabelProviderListener arg0) {
// TODO Auto-generated method stub
}
}