首先给出效果图:
本例主要使用的是JFace中的CheckboxTableViewer,废话少说,直接上代码:
/**
* 创建一个带复选框的表格
*/
public void createCheckTable() {
// 注意,这里要选择SWT.CHECK风格,这样表格才有复选框
Table table = new Table(parentComposite, SWT.BORDER | SWT.FULL_SELECTION | SWT.CHECK | SWT.MULTI);
FormData fd_table = new FormData();
fd_table.top = new FormAttachment(0, 5);
fd_table.left = new FormAttachment(0, 5);
fd_table.right = new FormAttachment(100, -5);
fd_table.bottom = new FormAttachment(100, -25);
table.setLayoutData(fd_table);
TableColumn choice = new TableColumn(table, SWT.BORDER);
choice.setText("选择");
choice.setWidth(50);
choice.setAlignment(SWT.CENTER);
TableColumn columnID = new TableColumn(table, SWT.BORDER);
columnID.setText("姓名");
columnID.setWidth(70);
columnID.setAlignment(SWT.CENTER);
TableColumn columnName = new TableColumn(table, SWT.CENTER);
columnName.setText("性别");
columnName.setWidth(70);
columnName.setAlignment(SWT.CENTER);
TableColumn department = new TableColumn(table, SWT.BORDER);
department.setAlignment(SWT.CENTER);
department.setText("部门");
department.setWidth(140);
TableColumn ideal = new TableColumn(table, SWT.BORDER);
ideal.setAlignment(SWT.CENTER);
ideal.setText("理想");
ideal.setWidth(140);
table.setHeaderVisible(true); // 设置列栏可见
table.setLinesVisible(true); // 设置表格线可见
checkboxTableViewer = new CheckboxTableViewer(table);
// 为表格设置内容提供者
checkboxTableViewer.setContentProvider(new ArrayContentProvider());
// 为表格设置标签提供者,最下面给出代码
checkboxTableViewer.setLabelProvider(new CheckTableLabelProvider());
// 为表格填充数据,peopleList的类型是List<PeopleModel>
checkboxTableViewer.setInput(peopleList);
selectAllButton = new Button(parentComposite, SWT.CHECK); //全选的复选框按钮
FormData fd_selectAllButton = new FormData();
fd_selectAllButton.top = new FormAttachment(table, 6);
fd_selectAllButton.left = new FormAttachment(table, 0, SWT.LEFT);
selectAllButton.setLayoutData(fd_selectAllButton);
selectAllButton.setText("全选");
// 创建表格的事件
createTableEvent();
// 创建全选按钮的事件
createCheckBoxEvent();
}
下面给出事件的代码,此例的表格可以进行多选。
/**
* 创建表格的响应事件
*/
private void createTableEvent() {
// 双击表格某一行,改变该行的复选框状态
checkboxTableViewer.addDoubleClickListener(new IDoubleClickListener(){
@Override
public void doubleClick(DoubleClickEvent event) {
IStructuredSelection selection = (IStructuredSelection) event.getSelection();
Object obj = selection.getFirstElement();
if(obj instanceof PeopleModel) {
checkboxTableViewer.setChecked(obj,
!checkboxTableViewer.getChecked(obj));
// 注意,即使你添加了CheckStateListener监听,这里还是要手动改变复选框的状态
changeCheckBoxState();
}
}
});
// 根据表格的状态来改变全选按钮的状态
checkboxTableViewer.addCheckStateListener(new ICheckStateListener() {
@Override
public void checkStateChanged(CheckStateChangedEvent event) {
changeCheckBoxState();
}
});
}
/**
* 创建复选框监听事件
*/
public void createCheckBoxEvent() {
selectAllButton.addSelectionListener(new SelectionAdapter() {
selectAllButton.addPaintListener(new PaintListener() {
@Override
public void paintControl(PaintEvent e) {
tableViewer.setAllChecked(selectAllButton.getSelection());
}
});
}
/**
* 更改复选框状态
*/
public void changeCheckBoxState() {
if(checkboxTableViewer.getTable().getItemCount() ==
checkboxTableViewer.getCheckedElements().length) {
selectAllButton.setSelection(true);
} else {
selectAllButton.setSelection(false);
}
}
可以用下面的方法获得表格中所选择的行对象:
/**
* 返回表格中所选择的PeopleModel对象列表
* 返回的是复选框被勾选的行,如果没有被选择的行,则返回null
* @return List<PeopleModel>
*/
public List<PeopleModel> getSelection() {
Object[] objects = checkboxTableViewer.getCheckedElements();
List<PeopleModel> list = new ArrayList<PeopleModel>();
for(Object obj : objects) {
if(obj instanceof PeopleModel) {
list.add((PeopleModel) obj);
}
}
return (list.size() == 0 ? null: list);
}
这样表格就可以进行多选了,如果你需要单选,即最多选择一行,可以修改如下:
/**
* 创建表格的响应事件
*/
private void createTableEvent() {
// 双击表格某一行,改变该行的复选框状态
checkboxTableViewer.addDoubleClickListener(new IDoubleClickListener(){
@Override
public void doubleClick(DoubleClickEvent event) {
IStructuredSelection selection = (IStructuredSelection) event.getSelection();
Object obj = selection.getFirstElement();
// 如果该表格只能进行单选,则应该用如下代码:
if(obj instanceof PeopleModel) {
// 如果该行以前是选中状态,则现在把它变为不选中即可
if(checkboxTableViewer.getChecked(obj)) {
checkboxTableViewer.setChecked(obj, false);
// 否则,先让所有行都未选中,然后再选中这一行,以保证单选
} else {
checkboxTableViewer.setAllChecked(false);
checkboxTableViewer.setChecked(obj, true);
}
}
}
});
// 根据表格的状态来改变全选按钮的状态
checkboxTableViewer.addCheckStateListener(new ICheckStateListener() {
@Override
public void checkStateChanged(CheckStateChangedEvent event) {
// 如果用户使该行的状态变为了选中
if(event.getChecked()) {
// 选取消所有行的选中
checkboxTableViewer.setAllChecked(false);
// 然后再选中该行
checkboxTableViewer.setChecked(event.getElement(), true);
}
}
});
}
附录:
// 表格所绑定的数据模型类
public class PeopleModel {
private String name;
private String sex;
private String department;
private String ideal;
public PeopleModel(String name, String sex, String department, String ideal) {
this.name = name;
this.sex = sex;
this.department = department;
this.ideal = ideal;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// 其他成员变量的set、get方法
。。。。。。
}
// 表格所使用的标签提供者
class CheckTableLabelProvider extends LabelProvider implements ITableLabelProvider {
@Override
public Image getColumnImage(Object element, int columnIndex) {
return null;
}
@Override
public String getColumnText(Object element, int columnIndex) {
if(element instanceof PeopleModel) {
PeopleModel peopleModel = (PeopleModel) element;
switch(columnIndex) {
case 0:
return "";
case 1:
return peopleModel.getName();
case 2:
return peopleModel.getSex();
case 3:
return peopleModel.getDepartment();
case 4:
return peopleModel.getIdeal();
}
}
return null;
}
}
- 大小: 34.9 KB
- 大小: 35.5 KB
分享到:
相关推荐
"Check Table"在这里通常指的是带有复选框的表格视图,允许用户对表格中的每一行进行选择或操作。在Eclipse RCP应用中,这种组件常用于数据筛选、编辑或其他需要用户交互的场景。 `CheckTableViewDemo.java`可能是...
作为Eclipse项目的一部分,GridViewer与Eclipse RCP有着良好的集成,可以轻松地在RCP应用中使用,使得开发企业级桌面应用变得更加便捷。 综上所述,"org.eclipse.nebula.widgets.grid_1.0.0.jar"是Eclipse Nebula...
2. **基本控件**:包括按钮(Button)、文本框(Text)、标签(Label)、复选框(CheckBox)、单选按钮(RadioButton)、滚动条(ScrollBar)等,这些都是构建用户界面的基本元素。 3. **高级控件**:例如列表(List)、树(Tree)...
`CellEditor` 提供了多种类型,如文本编辑器、组合框编辑器、复选框编辑器等,可以根据需要选择合适的编辑器类型。在描述“rcp tableviewer celleditor”中,"rcp"代表Eclipse RCP,强调了这个功能在RCP环境下的应用...
9.9.2 设置带有选择框的表格 182 9.9.3 设置可同时选中多行表格 183 9.9.4 可拖动的表格 184 9.9.5 设置单元格的图标 184 9.9.6 改变选中行高亮显示的颜色 185 9.9.7 带有上下文菜单的表格 186 9.9.8 可...
TableViewer提供了多种列类型,如文本、复选框等,可以通过ColumnLabelProvider自定义列的显示。 - **TreeViewer**:用于展示树状结构的数据,每个节点可以有子节点。TreeViewer不仅支持基本的节点操作,还可以通过...
- **按钮(Buttons)**: 包括普通按钮、复选按钮和单选按钮,用于用户输入或触发事件。 - **文本框(Texts)**: 用于用户输入文本,支持多行文本和单行文本。 - **标签(Labels)**: 显示静态文本,可以用于提示信息...
3. **表单构建**:JFace提供了表单构建器,可以方便地创建和管理表单元素,如文本框、复选框、下拉菜单等,并且支持动态表单和复杂的数据验证。 4. **树和表**:JFace对SWT的树和表组件进行了扩展,增加了更多的...
- **Button**:讲解按钮控件的使用,包括普通按钮、复选框和单选按钮等。 - **List**:讨论列表控件的使用,包括单选和多选列表。 - **Combo**:介绍组合框控件的使用,包括下拉列表和文本输入结合的形式。 以上是...