package wei.learn.tableViewer;
import java.util.regex.Pattern;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.CheckboxCellEditor;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.ComboBoxCellEditor;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ViewForm;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.VerifyEvent;
import org.eclipse.swt.events.VerifyListener;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.ToolBar;
public class TableViewerShell extends Shell {
public static String[] NAMES = { "魏亚军", "小明", "小刚", "小张","魏亚军2","魏亚军3" };
/**
* Launch the application.
*
* @param args
*/
public static void main(String args[]) {
try {
Display display = Display.getDefault();
TableViewerShell shell = new TableViewerShell(display);
shell.open();
shell.setLayout(new FillLayout());
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Create the shell.
*
* @param display
*/
public TableViewerShell(Display display) {
super(display, SWT.SHELL_TRIM);
createContents();
}
/**
* Create contents of the shell.
*/
protected void createContents() {
setText("SWT Application");
setSize(450, 300);
// 增加布局基座viewForm
ViewForm viewForm = new ViewForm(this, SWT.NONE);
viewForm.setLayoutData(new FillLayout());
// 1. 创建一个TableViewer
final TableViewer viewer = new TableViewer(viewForm, SWT.MULTI
| SWT.BORDER | SWT.FULL_SELECTION | SWT.CHECK);
final CheckboxTableViewer ctv = new CheckboxTableViewer(
viewer.getTable());
// 2. 通过TableViewer内含有的Table对象设置布局方式
Table table = viewer.getTable();
table.setHeaderVisible(true); // 显示头
table.setLinesVisible(true); // 显示表格线
TableLayout layout = new TableLayout();
table.setLayout(layout); // 专用于表格的布局
// 3. 用TableColumn类创建表格列
layout.addColumnData(new ColumnWeightData(13)); // ID列宽13个像素
TableColumn col1 = new TableColumn(table, SWT.NONE);
col1.setText("ID号");
col1.addSelectionListener(new SelectionAdapter() {
boolean asc = true; // 记录上一次的排序方式,默认为升序
@Override
public void widgetSelected(SelectionEvent e) {
// asc=true则ID的升序排序器,否则用降序
viewer.setSorter(asc ? MySorter.ID_ASC : MySorter.ID_DESC);
asc = !asc;// 得到下一次排序方式
}
});
layout.addColumnData(new ColumnWeightData(20));
TableColumn col2 = new TableColumn(table, SWT.NONE);
col2.setText("姓名");
col2.addSelectionListener(new SelectionAdapter() {
boolean asc = true; // 记录上一次的排序方式,默认为升序
@Override
public void widgetSelected(SelectionEvent e) {
// asc=true则ID的升序排序器,否则用降序
viewer.setSorter(asc ? MySorter.NAME_ASC : MySorter.NAME_DESC);
asc = !asc;// 得到下一次排序方式
}
});
layout.addColumnData(new ColumnWeightData(20));
new TableColumn(table, SWT.NONE).setText("性别");
layout.addColumnData(new ColumnWeightData(20));
new TableColumn(table, SWT.NONE).setText("年龄");
layout.addColumnData(new ColumnWeightData(60));
new TableColumn(table, SWT.NONE).setText("记录建立时间");
// 4. 用TableViewer设置内容器和标签器
viewer.setContentProvider(new TableViewerContentProvider());
viewer.setLabelProvider(new TableViewerLableProvider());
// 5. 用TableViewer的setInput方法将数据输入到表格中
Object data = PeopleFactory.getPeoples();
viewer.setInput(data);
// 设置编辑组件CellEditor
viewer.setColumnProperties(new String[] { "id", "name", "sex", "age",
"date" });
// 设置每一列的单元格编辑组件CellEditor
CellEditor[] cellEditors = new CellEditor[5];
cellEditors[0] = null;
cellEditors[1] = new ComboBoxCellEditor(viewer.getTable(), NAMES,
SWT.READ_ONLY);
cellEditors[2] = new CheckboxCellEditor(viewer.getTable());
cellEditors[3] = new TextCellEditor(viewer.getTable());
cellEditors[4] = null;
viewer.setCellEditors(cellEditors);
// 设置表格的修改器MyCellModifier
viewer.setCellModifier(new MyCellModifier(viewer));
Text text = (Text) cellEditors[3].getControl();// 设置第4列只能输入数值
text.addVerifyListener(new VerifyListener() { // 以下代码说明参阅第8.4节“文本框”,完全一样
public void verifyText(VerifyEvent e) {
String inStr = e.text;
if (inStr.length() > 0) {
e.doit = isInteger(inStr);
}
}
public boolean isInteger(String str) {
Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
return pattern.matcher(str).matches();
}
});
addListener(viewer);
// 6. 向TableViewer注入action
MyActionGroup actionGroup = new MyActionGroup(viewer, ctv);
actionGroup.fillContextMenu(new MenuManager());
// 创建工具栏
ToolBar toolBar = new ToolBar(viewForm, SWT.FLAT); // 创建一个ToolBar容器
ToolBarManager toolBarManager = new ToolBarManager(toolBar); // 创建一个toolbar的管理器
// 将Action通过toolBarManager注入toolBar中
actionGroup.fillActionToolBars(toolBarManager);
// 设置表格和工具栏在布局中的位置
viewForm.setContent(viewer.getControl()); // 主体:表格
viewForm.setTopLeft(toolBar);
}
private void addListener(TableViewer viewer) {
viewer.addDoubleClickListener(new IDoubleClickListener() {
public void doubleClick(DoubleClickEvent event) {
// 得到表格的选择对象,里面封装了表格中被选择的记录信息
IStructuredSelection selection = (IStructuredSelection) event
.getSelection();
// 得到所选择的第一条实体对象(表格可以有多选),并进行类型转换
PeopleEntity p = (PeopleEntity) selection.getFirstElement();
// 弹出一个提示框
MessageDialog.openInformation(null, "提示", p.getName());
}
});
viewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
// 事件处理代码……(略)
}
});
}
@Override
protected void checkSubclass() {
// Disable the check that prevents subclassing of SWT components
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
TableViewer学习源码
共41个文件
class:20个
java:9个
png:8个
需积分: 21 12 下载量 102 浏览量
2015-10-30
17:50:24
上传
评论
收藏 37KB RAR 举报
温馨提示
虽然文件名字起得很笼统 里面只有一个关于TableViewer的项目源码 源码的依据是我转载的一篇学习TableViewer的博客源码 http://blog.csdn.net/weiweiwei256/article/details/49514699
资源推荐
资源详情
资源评论
收起资源包目录
wei.learn.SWTAndJFace.rar (41个子文件)
wei.learn.SWTAndJFace
.project 397B
icons
iconfont-disremove.png 483B
iconfont-star.png 394B
iconfont-selectall.png 469B
iconfont-refresh.png 458B
iconfont-project.png 380B
iconfont-remove.png 491B
iconfont-deselect.png 256B
iconfont-moon.png 398B
src
wei
learn
tableViewer
TableViewerLableProvider.java 2KB
PeopleEntity.java 761B
TableViewerShell.java 7KB
MyCellModifier.java 3KB
TableViewerContentProvider.java 1KB
MySorter.java 2KB
PeopleFactory.java 863B
MyFilter.java 577B
MyActionGroup.java 6KB
.settings
org.eclipse.jdt.core.prefs 670B
.classpath 3KB
.gitignore 6B
bin
wei
learn
tableViewer
MySorter.class 2KB
MyFilter.class 816B
TableViewerShell.class 6KB
TableViewerLableProvider.class 2KB
TableViewerShell$5.class 873B
MyActionGroup$RemoveAction.class 3KB
MyActionGroup.class 4KB
PeopleEntity.class 1KB
TableViewerShell$3.class 1KB
TableViewerShell$2.class 1KB
TableViewerShell$4.class 1KB
MyActionGroup$DeselectAction.class 1KB
MyActionGroup$OpenAction.class 2KB
MyActionGroup$SelectAllAction.class 1KB
MyActionGroup$AddAction.class 2KB
MyCellModifier.class 3KB
MyActionGroup$RefreshAction.class 1KB
TableViewerContentProvider.class 997B
PeopleFactory.class 1KB
TableViewerShell$1.class 1KB
共 41 条
- 1
资源评论
RUNNER_UP
- 粉丝: 13
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功