package com.soyatec;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.CheckboxCellEditor;
import org.eclipse.jface.viewers.ColumnViewer;
import org.eclipse.jface.viewers.ComboBoxCellEditor;
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
public class TableViewerTest {
private Shell shell;
private Display display;
private TableViewer viewer;
private List<User> listValues = new ArrayList<User>(0);
private TableViewerTest() {
initListValue();
}
// 初始化数据
private void initListValue() {
User user = new User("唐僧", 58, 0, "湖南", true);
listValues.add(user);
user = new User("六小龄童", 38, 1, "湖北", false);
listValues.add(user);
user = new User("猪八戒", 18, 0, "河南", true);
listValues.add(user);
user = new User("沙悟净", 8, 1, "东北", false);
listValues.add(user);
}
public static void main(String[] args) {
new TableViewerTest().createTableViewer();
}
// 构建表格
private void createTableViewer() {
shell = new Shell();
shell.setText("TableViewer");
shell.setSize(500, 300);
display = Display.getDefault();
shell.setLayout(new GridLayout());
Composite composite = new Composite(shell, SWT.NONE);
GridLayoutFactory.swtDefaults().numColumns(1).applyTo(composite);
GridDataFactory.fillDefaults().grab(true, true).applyTo(composite);
composite.setLayoutData(new GridData(GridData.FILL_BOTH));
viewer = new TableViewer(composite, SWT.FULL_SELECTION);
Table table = viewer.getTable();
table.setHeaderVisible(true);
table.setLinesVisible(true);
table.setLayoutData(new GridData(GridData.FILL_BOTH));
String[] heards = new String[] { "name", "age", "sex", "address",
"select all" };
for (int i = 0; i <= 4; i++) {
TableViewerColumn column = new TableViewerColumn(viewer, SWT.LEFT);
column.getColumn().setText(heards[i]);
column.getColumn().setWidth(100);
column.setEditingSupport(new TableViewerEditingSupport(viewer, i));
}
viewer.setLabelProvider(new TableLableProvider());
viewer.setContentProvider(new TableContentProvider());
viewer.setInput(listValues);
shell.layout();
shell.open();
while (!shell.isDisposed())
if (!display.readAndDispatch())
display.sleep();
}
// 定义模型
static class User {
String name;
int age;
int sex;
String address;
boolean isSelected;
public User(String name, int age, int sex, String address,
boolean isSelected) {
super();
this.name = name;
this.age = age;
this.sex = sex;
this.address = address;
this.isSelected = isSelected;
}
public boolean isSelected() {
return isSelected;
}
public void setSelected(boolean isSelected) {
this.isSelected = isSelected;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
static class TableLableProvider extends LabelProvider implements
ITableLabelProvider {
final Image check = ImageDescriptor.createFromFile(
TableViewerTest.class, "checked.gif").createImage();
final Image uncheck = ImageDescriptor.createFromFile(
TableViewerTest.class, "unchecked.gif").createImage();
@Override
public Image getColumnImage(Object element, int columnIndex) {
User user = (User) element;
if (columnIndex == 4)
if (user.isSelected)
return check;
else
return uncheck;
return super.getImage(element);
}
@Override
public String getColumnText(Object element, int columnIndex) {
User user = (User) element;
switch (columnIndex) {
case 0:
return user.getName();
case 1:
return String.valueOf(user.getAge());
case 2:
if (user.getSex() == 0)
return "男";
else
return "女";
case 3:
return user.getAddress();
case 4:
return String.valueOf(user.isSelected());
}
return null;
}
}
static class TableContentProvider implements IStructuredContentProvider {
@Override
public Object[] getElements(Object inputElement) {
if (inputElement instanceof Collection<?>) {
return ((Collection<?>) inputElement).toArray(new Object[0]);
}
return null;
}
@Override
public void dispose() {
}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
}
static class TableViewerEditingSupport extends EditingSupport {
int column;
private TableViewer columnViewer;
private CellEditor editor;
public TableViewerEditingSupport(ColumnViewer viewers, int column) {
super(viewers);
this.columnViewer = (TableViewer) viewers;
switch (column) {
case 0:
editor = new TextCellEditor(columnViewer.getTable(), SWT.SINGLE
| SWT.BORDER);
break;
case 1:
editor = new TextCellEditor(columnViewer.getTable(), SWT.SINGLE
| SWT.BORDER);
break;
case 2:
editor = new ComboBoxCellEditor(columnViewer.getTable(),
new String[] { "男", "女" }, SWT.READ_ONLY | SWT.SINGLE
| SWT.BORDER);
break;
case 3:
editor = new ComboBoxCellEditor(columnViewer.getTable(),
new String[] { "湖南", "湖北", "河南", "东北" }, SWT.READ_ONLY
| SWT.SINGLE | SWT.BORDER);
break;
case 4:
editor = new CheckboxCellEditor(columnViewer.getTable(),
SWT.SINGLE | SWT.CHECK);
break;
}
this.column = column;
}
@Override
protected boolean canEdit(Object element) {
return true;
}
@Override
protected CellEditor getCellEditor(Object element) {
return editor;
}
@Override
protected Object getValue(Object element) {
User user = (User) element;
switch (column) {
case 0:
return user.getName();
case 1:
return user.getAge() + "";
case 2:
if (user.getSex() == 0)
return 0;
else
return 1;
case 3:
if (user.getAddress().equals("湖南"))
return 0;
else if (user.getAddress().equals("湖北"))
return 1;
else if (user.getAddress().equals("河南"))
return 2;
else
return 3;
case 4:
return user.isSelected();
}
return null;
}
@Override
protected void setValue(Object element, Object value) {
User user = (User) element;
switch (column) {
case 0:
user.setName(value.toString());
break;
case 1:
user.setAge(Integer.parseInt(value.toString()));
break;
case 2:
if (Integer.parseInt(value.toString()) == 0)
user.setSex(0);
else
user.setSex(1);
break;
case 3:
if (Integer.parseInt(value.toString()) == 0)
user.setAddress("湖南");
else if (Integer.parseInt(value.toString()) == 1)
user.setAddress("湖北");
else if (Integer.parseInt(value.toString()) == 2)
user.setAddress("河南");
else
user.setAddress("东北");
break;
case 4:
user.setSelected(Boolean.valueOf(value.toString()));
break;
}
columnViewer.refresh(true);
}
}
}
分享到:
相关推荐
Jface TableViewer控件实现的对标签文件的标签属性的修改功能。 用TextCellEditor和ComboBoxCellEditor给表格添加编辑功能。 通过表格的addListener事件为表格的单元格添加编辑功能,事例根据鼠标点击时鼠标的X和Y...
### SWT Table单元格编辑功能详解 在Java图形用户界面(GUI)开发中,SWT...通过以上步骤,我们可以在SWT `Table`控件中实现单元格的编辑功能,使用户能够直接在界面上修改数据,提高了应用的交互性和实用性。
如果需要使表格单元格可编辑,可以实现`ITableEditorProvider`并添加到`TableViewer`。`CellEditor`类提供了多种类型的编辑器,如文本、组合框等。 6. **事件监听** 可以通过注册监听器来响应用户的操作,例如`...
总结,TableViewer是SWT中处理表格数据的强大工具,通过与ContentProvider、LabelProvider以及各种监听器配合,能够实现复杂的数据展示和交互功能。熟练掌握TableViewer的使用,将极大地提升Java桌面应用的用户体验...
6. **定制化功能**: `tableViewer`支持自定义列宽、单元格样式,甚至自定义单元格编辑器,提供高度可定制化的用户体验。 关于压缩包文件`tableReflectPro`,名字暗示可能是一个关于反射(Reflection)的工具或示例...
3. "jface TableViewer ViewerCell editElement based on Column - Stack Overflow.mht" 可能涉及根据列条件触发单元格编辑的实现。 4. "Eclipse JFace TableViewer - Tutorial.mht" 是一个JFace TableViewer的教程...
1. **选择表格控件**:在Eclipse RCP中,可以使用JFace或SWT库中的TableViewer控件来创建表格;而在WPF中,可以使用DataGrid控件。这些控件提供了基本的表格布局和数据绑定功能。 2. **数据模型**:为了填充表格,...
CellEditor允许我们在TableViewer的特定单元格中插入一个可编辑的控件,例如Text或Combo,当用户完成编辑后,单元格会返回到其默认的只读状态。 1. **Text CellEditor**: 这种编辑样式通常用于输入文本数据。Text ...
// 允许所有行都可编辑 } }); ``` 3. **事件处理**:`CheckBoxCellEditor`在被点击时会自动处理选择状态的改变,但如果你需要在选中状态改变时执行其他操作,可以添加监听器。例如,添加`SelectionListener`来...
Agile Grid在实现时充分借鉴了Eclipse JFace中TableViewer的设计模式,同时对表格控件的灵活性和可扩展性做了增强设计,开发者可依据具体应用的需要对Agile Grid的布局、煊染、编辑、键盘导航等进行灵活定制。
以上就是Eclipse RCP中实现“Check Table”功能的一些核心概念和技术,实际开发中,开发者还需要考虑代码的可维护性、用户体验以及与其他组件的集成等因素。通过深入理解这些知识,可以更好地利用Eclipse RCP构建...
5. 结果集的显示和管理,如TableViewer和数据表格。 6. 高级功能的添加,如元数据查看、事务管理和性能分析。 7. RCP产品的打包和部署。 通过实践这个项目,开发者不仅可以深化对Eclipse RCP的理解,还能提升Java ...
Viewer提供了多种类型的视图实现,如TableViewer、TreeViewer等,它们可以方便地展示数据,并支持排序、过滤、编辑等功能。 **2. 数据模型** 在JFace Viewer中,数据模型是通过ContentProvider和LabelProvider来...
9.9.8 可编辑的表格(TableEditor) 187 9.9.9 用键盘控制表格(TableCursor) 189 9.9.10 带有进度条的表格 191 9.9.11 表格小结 192 9.10 树(Tree) 192 9.10.1 不同样式的树 193 9.10.2 为树添加...
在SWT和JFace中实现CRM,可能涉及表格控件(TableViewer)展示客户数据,树形结构(TreeViewer)组织客户分类,对话框处理交互操作,以及数据持久化存储(如数据库连接)等。 3. **实战项目**:这些源代码可能包含...
例如,TreeViewer和TableViewer允许开发者以表格形式展示和编辑数据。 6. EclipseSWTJFace开发实战精解: 这本书可能详细讲解了如何在Eclipse环境中使用SWT和JFace进行实际开发,包括创建窗口、添加组件、处理事件...
例如,开发者在创建一个数据编辑器时,可以利用JFace的TableViewer组件来展示数据,通过DataBinding将数据模型与表格绑定,实现数据的实时更新。当用户在表格中修改数据时,相关的模型对象会自动同步更新,无需编写...
JFace 的 `TableViewer` 可以进一步增强表格功能,如数据绑定和行操作。 - Tree:`Tree` 组件用于展示层次化的数据结构,`TreeViewer` 提供了对树状数据的管理,包括添加、删除节点和更新节点内容。 - List:`List...
例如,TableViewer用于显示表格数据,而TreeViewer则用于显示树形结构的数据。 2. **Editors**:JFace提供了一些内置的编辑器,如TextEditor,可以方便地在UI中编辑文本内容。 3. **DataBinding**:JFace的数据...