`
annewman
  • 浏览: 30785 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

实现可编辑的表格TableViewer

    博客分类:
  • SWT
阅读更多
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);
		}
	}
}

 

2
0
分享到:
评论
2 楼 tomfish88 2011-10-13  
改完表格内容不变·!
1 楼 tomfish88 2011-10-12  
goode

相关推荐

    TableViewer单元格编辑功能

    Jface TableViewer控件实现的对标签文件的标签属性的修改功能。 用TextCellEditor和ComboBoxCellEditor给表格添加编辑功能。 通过表格的addListener事件为表格的单元格添加编辑功能,事例根据鼠标点击时鼠标的X和Y...

    SWT Table单元格编辑功能

    ### SWT Table单元格编辑功能详解 在Java图形用户界面(GUI)开发中,SWT...通过以上步骤,我们可以在SWT `Table`控件中实现单元格的编辑功能,使用户能够直接在界面上修改数据,提高了应用的交互性和实用性。

    Tableviewer实现

    如果需要使表格单元格可编辑,可以实现`ITableEditorProvider`并添加到`TableViewer`。`CellEditor`类提供了多种类型的编辑器,如文本、组合框等。 6. **事件监听** 可以通过注册监听器来响应用户的操作,例如`...

    TableViewer示例

    总结,TableViewer是SWT中处理表格数据的强大工具,通过与ContentProvider、LabelProvider以及各种监听器配合,能够实现复杂的数据展示和交互功能。熟练掌握TableViewer的使用,将极大地提升Java桌面应用的用户体验...

    swt/jface tableViewer开发简化

    6. **定制化功能**: `tableViewer`支持自定义列宽、单元格样式,甚至自定义单元格编辑器,提供高度可定制化的用户体验。 关于压缩包文件`tableReflectPro`,名字暗示可能是一个关于反射(Reflection)的工具或示例...

    Setting focus cell in TableViewer

    3. "jface TableViewer ViewerCell editElement based on Column - Stack Overflow.mht" 可能涉及根据列条件触发单元格编辑的实现。 4. "Eclipse JFace TableViewer - Tutorial.mht" 是一个JFace TableViewer的教程...

    行业文档-设计装置-富客户平台中表格的创建方法及装置.zip

    1. **选择表格控件**:在Eclipse RCP中,可以使用JFace或SWT库中的TableViewer控件来创建表格;而在WPF中,可以使用DataGrid控件。这些控件提供了基本的表格布局和数据绑定功能。 2. **数据模型**:为了填充表格,...

    swt_jface_celleditor

    CellEditor允许我们在TableViewer的特定单元格中插入一个可编辑的控件,例如Text或Combo,当用户完成编辑后,单元格会返回到其默认的只读状态。 1. **Text CellEditor**: 这种编辑样式通常用于输入文本数据。Text ...

    CheckBoxCellEditor.zip_CheckboxCellEditor_SWT_cell

    // 允许所有行都可编辑 } }); ``` 3. **事件处理**:`CheckBoxCellEditor`在被点击时会自动处理选择状态的改变,但如果你需要在选中状态改变时执行其他操作,可以添加监听器。例如,添加`SelectionListener`来...

    swt agile grid 学习示例

    Agile Grid在实现时充分借鉴了Eclipse JFace中TableViewer的设计模式,同时对表格控件的灵活性和可扩展性做了增强设计,开发者可依据具体应用的需要对Agile Grid的布局、煊染、编辑、键盘导航等进行灵活定制。

    eclipse rcp check table

    以上就是Eclipse RCP中实现“Check Table”功能的一些核心概念和技术,实际开发中,开发者还需要考虑代码的可维护性、用户体验以及与其他组件的集成等因素。通过深入理解这些知识,可以更好地利用Eclipse RCP构建...

    eclipse RCP开发一个简单的MYSQL客户端工具介绍

    5. 结果集的显示和管理,如TableViewer和数据表格。 6. 高级功能的添加,如元数据查看、事务管理和性能分析。 7. RCP产品的打包和部署。 通过实践这个项目,开发者不仅可以深化对Eclipse RCP的理解,还能提升Java ...

    JFace-viewer

    Viewer提供了多种类型的视图实现,如TableViewer、TreeViewer等,它们可以方便地展示数据,并支持排序、过滤、编辑等功能。 **2. 数据模型** 在JFace Viewer中,数据模型是通过ContentProvider和LabelProvider来...

    Eclipse_Swt_Jface_核心应用_部分19

    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核心应用原代码

    在SWT和JFace中实现CRM,可能涉及表格控件(TableViewer)展示客户数据,树形结构(TreeViewer)组织客户分类,对话框处理交互操作,以及数据持久化存储(如数据库连接)等。 3. **实战项目**:这些源代码可能包含...

    SWT详细精解

    例如,TreeViewer和TableViewer允许开发者以表格形式展示和编辑数据。 6. EclipseSWTJFace开发实战精解: 这本书可能详细讲解了如何在Eclipse环境中使用SWT和JFace进行实际开发,包括创建窗口、添加组件、处理事件...

    jface.rar

    例如,开发者在创建一个数据编辑器时,可以利用JFace的TableViewer组件来展示数据,通过DataBinding将数据模型与表格绑定,实现数据的实时更新。当用户在表格中修改数据时,相关的模型对象会自动同步更新,无需编写...

    多个SWT例子

    JFace 的 `TableViewer` 可以进一步增强表格功能,如数据绑定和行操作。 - Tree:`Tree` 组件用于展示层次化的数据结构,`TreeViewer` 提供了对树状数据的管理,包括添加、删除节点和更新节点内容。 - List:`List...

    JFace一些资料

    例如,TableViewer用于显示表格数据,而TreeViewer则用于显示树形结构的数据。 2. **Editors**:JFace提供了一些内置的编辑器,如TextEditor,可以方便地在UI中编辑文本内容。 3. **DataBinding**:JFace的数据...

Global site tag (gtag.js) - Google Analytics