《Eclipse SWT/JFACE 核心应用》 清华大学出版社 19 MVC的表格、树和列表
19.1 MVC概述
MVC是模型-视图=控制器(Model-View-Controller)设计模式的简称。MVC模式将数据与视图分开,通过控制器来控制与数据交互。
JFace中有关实现MVC模式的控件都在org.eclipse.jface.viewers包下。所有的MVC控件都继承自View类,该类是一个抽
象类,不能直接创建对象,需使用其实现的子类。常用的类如下:
◆ ListViewer类:列表控件。
◆ TreeViewer类:树控件。
◆ TableViewer类:表格控件。
◆ TextViewer、SourceViewer、ProjectionViewer为编辑文本的控件。
19.2 表格(TableViewer)
表格程序的代码:
packagewww.swt.com.ch19;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
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.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Item;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TableColumn;
public class TableWindow extends ApplicationWindow {
private TableViewer table;//声明一个表格对象
private List persons ;//表格所存储的数据
//表格中列的索引号
public static final int ID = 0;
public static final int NAME = 1;
public static final int GENDER = 2;
public static final int COLOR = 3;
//表格个的列名称
public static final String[] COLUMN_NAME = { "ID号" ,"姓名","性别","喜欢颜色"};
public TableWindow() {
super(null);
initPersons();
}
//初始化表格数据,通常是从数据库中读出
private void initPersons() {
persons = new ArrayList();
persons.add( new PersonEO(1,"张三","男","灰色"));
persons.add( new PersonEO(2,"李四","女","白色"));
}
//设置窗口的标题和大小
protected void configureShell(Shell shell) {
super.configureShell(shell);
shell.setSize(300, 200);
shell.setText("TableViewer程序示例");
}
//创建窗口的控件
protected Control createContents(Composite parent) {
//创建TableViewer对象
table = new TableViewer(parent ,SWT.FULL_SELECTION);
//table = CheckboxTableViewer.newCheckList( parent , SWT.FULL_SELECTION);
//创建表头
for ( int i =0; i
new TableColumn(table.getTable(), SWT.LEFT).setText(COLUMN_NAME[i]);
table.getTable().getColumn(i).pack();
}
//设置排序器
table.setSorter( new TableSorter()); //分别为表头的每一列注册事件
TableColumn column = table.getTable().getColumn(0);
column.addSelectionListener( new SelectionAdapter(){
public void widgetSelected(SelectionEvent e) {
//单击时,重新设置排序对象属性
((TableSorter)table.getSorter()).doSort(TableWindow.ID);
//刷新表格数据
table.refresh();
}
});
column = table.getTable().getColumn(1);
column.addSelectionListener( new SelectionAdapter(){
public void widgetSelected(SelectionEvent e) {
((TableSorter)table.getSorter()).doSort(TableWindow.NAME);
table.refresh();
}
});
column = table.getTable().getColumn(2);
column.addSelectionListener( new SelectionAdapter(){
public void widgetSelected(SelectionEvent e) {
((TableSorter)table.getSorter()).doSort(TableWindow.GENDER);
table.refresh();
}
});
column = table.getTable().getColumn(3);
col