`
favor
  • 浏览: 144045 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JFace TableViewer初入

阅读更多
TableViewer初入

本例会实现些效果


右键菜单


双击一行




首先新建PeopleEntity,此类为假想数据表entity
package com.mypractice;

import java.util.Date;

public class PeopleEntity {

	private Long id;

	private String name;

	private boolean sex;

	private int age;

	private Date createDate;

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public Date getCreateDate() {
		return createDate;
	}

	public void setCreateDate(Date createDate) {
		this.createDate = createDate;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public boolean isSex() {
		return sex;
	}

	public void setSex(boolean sex) {
		this.sex = sex;
	}
}

然后创建PeopleFactory,用来生成PeopleEntity
package com.mypractice;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class PeopleFactory {

	public static List<PeopleEntity> getPeoples() {
		List<PeopleEntity> list = new ArrayList<PeopleEntity>();
		{
			PeopleEntity o = new PeopleEntity();
			o.setId(new Long(1));
			o.setName("赵云");
			o.setSex(true);
			o.setAge(28);
			o.setCreateDate(new Date());
			list.add(o);
		}
		
		{
			PeopleEntity o = new PeopleEntity();
			o.setId(new Long(2));
			o.setName("关羽");
			o.setSex(true);
			o.setAge(20);
			o.setCreateDate(new Date());
			list.add(o);
		}
		{
			PeopleEntity o = new PeopleEntity();
			o.setId(new Long(3));
			o.setName("曹操");
			o.setSex(true);
			o.setAge(23);
			o.setCreateDate(new Date());
			list.add(o);
		}
		{
			PeopleEntity o = new PeopleEntity();
			o.setId(new Long(4));
			o.setName("张飞");
			o.setSex(false);
			o.setAge(30);
			o.setCreateDate(new Date());
			list.add(o);
		}
		return list;
	}
}

创建OpenAction,生成右键菜单"打开"
package com.mypractice;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TableViewer;

public class OpenAction extends Action {

	private TableViewer tv;
	
	public OpenAction(TableViewer tv) {
		this.tv = tv;
		setText("打开");
	}
	
	public void run() {
		IStructuredSelection selection = (IStructuredSelection) tv.getSelection();
		PeopleEntity o = (PeopleEntity) selection.getFirstElement();
		if(o == null)
			MessageDialog.openInformation(null, null, "请先选择记录");
		else
			MessageDialog.openInformation(null, null, o.getName());
	}
}

创建RefreshAction类 生成右键菜单"刷新"
package com.mypractice;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.viewers.TableViewer;

public class RefreshAction extends Action {

	private TableViewer tv;
	
	public RefreshAction(TableViewer tv) {
		this.tv = tv;
		setText("刷新");
	}
	
	public void run() {
		tv.refresh();//表格的刷新方法,界面会重新读取数据并显示
	}
}

创建MyActionGroup 管理Action
package com.mypractice;

import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Table;
import org.eclipse.ui.actions.ActionGroup;

public class MyActionGroup extends ActionGroup {

	private TableViewer tv;
	
	public MyActionGroup(TableViewer tv) {
		this.tv = tv;
	}
	
	public void fillContextMenu(IMenuManager mgr) {
		MenuManager menuManager = (MenuManager) mgr;
		menuManager.add(new OpenAction(tv));
		menuManager.add(new RefreshAction(tv));
		
		Table table = tv.getTable();
		Menu menu = menuManager.createContextMenu(table);
		table.setMenu(menu);
	}
}

创建TableViewerContentProvider 内空提供器,用来对输入到表格的数据进行过滤
package com.mypractice;

import java.util.List;

import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.Viewer;

public class TableViewerContentProvider implements IStructuredContentProvider {

	public Object[] getElements(Object inputElement) {
		if(inputElement instanceof List)
			return ((List) inputElement).toArray();
		return new Object[0];
	}

	/**
	 * 当TableViewer对象被关闭时触发执行此方法
	 */
	public void dispose() {

	}

	/**
	 * 当TableViewer再次调用setInput()时触发此方法执行
	 */
	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {

	}

}

创建TableViewerLabelProvider 对单个对象进行处理和转化,决定实体显示位置
package com.mypractice;

import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.swt.graphics.Image;

public class TableViewerLabelProvider implements ITableLabelProvider {

	private Image[] images = new Image[]{
			new Image(null, "icons/star.gif"),
			new Image(null, "icons/refresh.gif"),
			new Image(null, "icons/3.gif")
	};
	
	public Image getColumnImage(Object element, int columnIndex) {
		PeopleEntity o = (PeopleEntity) element;
		if(o.getName().equals("赵云") || o.getName().equals("张飞")) {
			if(columnIndex == 0)
				return images[0];
			if(columnIndex == 2)
				return o.isSex() ? images[1] : images[2];
		}
		return null;
	}

	public String getColumnText(Object element, int columnIndex) {
		PeopleEntity o = (PeopleEntity) element;
		if(columnIndex == 0)
			return o.getId().toString();
		if(columnIndex == 1)
			return o.getName();
		if(columnIndex == 2)
			return o.isSex() ? "男" : "女";
		if(columnIndex == 3)
			return String.valueOf(o.getAge());
		if(columnIndex == 4)
			return o.getCreateDate().toString();
		return null;
	}

	public void addListener(ILabelProviderListener listener) {
		
	}

	public void dispose() {
		for(Image image : images) {
			image.dispose();
		}
	}

	public boolean isLabelProperty(Object element, String property) {
		return false;
	}

	public void removeListener(ILabelProviderListener listener) {
		
	}
}

最后创建ShowTable
package com.mypractice;

import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ColumnWeightData;
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.swt.SWT;
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;

public class ShowTable {

	public static void main(String[] args) {
		Display display = new Display();
		Shell shell = new Shell(display);
		shell.setLayout(new FillLayout());
		TableViewer tv = new TableViewer(shell, SWT.MULTI | SWT.BORDER
				| SWT.FULL_SELECTION);
		Table table = tv.getTable();
		table.setHeaderVisible(true);
		table.setLinesVisible(true);
		TableLayout layout = new TableLayout();
		table.setLayout(layout);

		layout.addColumnData(new ColumnWeightData(13));
		new TableColumn(table, SWT.NONE).setText("ID号");

		layout.addColumnData(new ColumnWeightData(40));
		new TableColumn(table, SWT.NONE).setText("姓名");

		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("记录建立时间");

		tv.setContentProvider(new TableViewerContentProvider());

		tv.setLabelProvider(new TableViewerLoabelProvider());
		Object data = PeopleFactory.getPeoples();

		tv.setInput(data);
		ShowTable show = new ShowTable();
		show.addListener(tv);
		
		MyActionGroup actionGroup = new MyActionGroup(tv);
		actionGroup.fillContextMenu(new MenuManager());
		shell.open();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch())
				display.sleep();
		}
	}
	
	private void addListener(TableViewer tv) {
		tv.addDoubleClickListener(new IDoubleClickListener(){

			public void doubleClick(DoubleClickEvent event) {
				IStructuredSelection selection = (IStructuredSelection) event.getSelection();
				PeopleEntity o = (PeopleEntity) selection.getFirstElement();
				
				MessageDialog.openInformation(null, "提示", o.getName());
			}
			
		});
		
		//选择事件(单击)
		tv.addSelectionChangedListener(new ISelectionChangedListener() {

			public void selectionChanged(SelectionChangedEvent event) {
//				IStructuredSelection selection = (IStructuredSelection) event.getSelection();
//				PeopleEntity o = (PeopleEntity) selection.getFirstElement();
//				MessageDialog.openInformation(null, "提示", o.getName() + "年龄是" + o.getAge());
			}
			
		});
	}
}



  • 大小: 31.5 KB
  • 大小: 32.1 KB
  • 大小: 43.8 KB
分享到:
评论

相关推荐

    Swt/Jface tableViewer入门教程一(显示tableViewer)

    在本文中,我们将深入探讨如何使用Swt/Jface库中的`tableViewer`组件来创建一个基本的表格视图。Swt(Standard Widget Toolkit)是Java中用于开发原生界面的应用程序开发工具包,而Jface是建立在Swt之上的抽象层,...

    Swt/Jface tableViewer入门教程三(加入在表格上直接编辑数据)

    在本文中,我们将深入探讨如何使用Swt/Jface库中的`TableViewer`组件来创建一个功能丰富的表格,并实现用户可以直接在表格上编辑数据的功能。Swt/Jface是Eclipse平台的一部分,提供了一套用于构建图形用户界面(GUI...

    swt/jface tableViewer开发简化

    本篇文章将聚焦于SWT/JFace中的tableViewer组件的开发与简化。 首先,`tableViewer`是JFace库中用于展示表格数据的核心组件。它为开发者提供了一种方便的方式来显示和操作数据,同时处理了诸如排序、过滤等复杂功能...

    JFace TableViewer的单元格逐个遍历的辅助类

    点击Enter键,对TableViewer的单元格进行逐个遍历的辅助类,推荐用于使用ViewerColumn.setEditingSupport的可编辑TableViewer。 Since 3.3, an alternative API is available, see ViewerColumn.setEditingSupport...

    Plugins-JFace-TableViewer.rar

    Plugins-JFace-TableViewer.rar Plugins-JFace-TableViewer.rar Plugins-JFace-TableViewer.rar Plugins-JFace-TableViewer.rar Plugins-JFace-TableViewer.rar

    Tableviewer实现

    `TableViewer`是Eclipse提供的一个高级表格视图组件,它是`JFace Data Binding`包的一部分。`TableViewer`基于SWT(Standard Widget Toolkit)的`Table`控件,但提供了更多的功能和灵活性,使得数据绑定和表格操作变...

    Setting focus cell in TableViewer

    4. "Eclipse JFace TableViewer - Tutorial.mht" 是一个JFace TableViewer的教程,可能包含了如何创建和操作TableViewer的详细步骤。 5. "[Eclipse_Project] View of -org_eclipse_swt_snippets-src-org-eclipse-swt...

    TableViewer单元格编辑功能

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

    swt_jface_celleditor

    `swt_jface_celleditor` 标题和描述所涉及的知识点主要围绕如何在SWT/JFace中的TableViewer组件实现单元格的编辑功能,包括Text、Combo以及FileDialog这三种不同的编辑样式。 首先,SWT是Eclipse项目的一部分,它...

    Set TableViewer Cell Focus

    总的来说,"Set TableViewer Cell Focus"是Eclipse JFace编程中的一个重要技巧,它涉及到对TableViewer组件的操作和对用户交互的响应。理解和掌握这些知识点,对于编写功能丰富的用户界面是非常有益的。

    jface 入门例子

    2. **Viewer Framework**:JFace的`TableViewer`和`TreeViewer`提供了强大的表格和树形视图管理,支持数据模型、过滤、排序等功能。例如,创建一个表格展示数据: ```java Table table = new Table(shell, SWT....

    org.eclipse.jface.rar

    1. **Viewers**:JFace提供了一种模型-视图-控制器(MVC)的实现,用于构建可定制的数据查看器,如TreeViewer和TableViewer。它们允许开发者以树形或表格形式展示数据,并提供了丰富的操作,如排序、过滤和编辑。 2...

    JFace一些资料

    **JFace技术详解** JFace是Eclipse框架中的一部分,它是构建用户界面(UI)的一种高级工具包。JFace的设计目标是提供一个面向对象的、与操作系统无关的接口,简化Swing和SWT(Standard Widget Toolkit)之间的开发...

    SWT/JFace专题 --- SWT/JFace概述

    3. 表格和树视图:如何使用TableViewer和TreeViewer来展示和操作结构化数据。 4. 模型-视图-控制器(MVC):解释MVC模式如何帮助保持代码的清晰性和可扩展性。 5. 对话框(Dialogs):介绍如何使用JFace提供的标准...

    全面介绍SWT-JFace

    4. **表和树的数据视图**:JFace的TableViewer和TreeViewer提供了对表格和树形结构数据的高级支持,包括排序、过滤和分页等功能。 5. **视图和编辑器**:在Eclipse IDE中,JFace用于创建可复用的视图和编辑器组件,...

    SWT/JFace从入门到精通

    - 探索JFace:了解JFace如何简化SWT的使用,如利用TreeViewer和TableViewer展示数据。 - 练习MVC:通过创建一个简单的数据编辑视图,实践JFace的MVC模式。 - 扩展Eclipse:学习如何创建Eclipse插件,将SWT/JFace...

    swt/jface api帮助文档

    JFace的TableViewer和TreeViewer提供了一种更抽象的方式来操作这些组件,包括数据绑定和排序。 7. **JFace服务**:包括Dialog、WorkbenchWindow、Action、SelectionService等,它们简化了窗口、动作和选择事件的...

    SWT+JFace 源代码

    3. **表和树的视图**:JFace的TableViewer和TreeViewer类提供了丰富的表格和树形视图功能,支持排序、过滤和自定义列。 4. **对话框和页面**:JFace简化了创建各种对话框和向导页的过程,例如InputDialog、...

    tableviewer edit

    `TableViewer` 是 `JFace` 库的一部分,它提供了与 SWT(Standard Widget Toolkit)表格控件的高级接口,使得数据绑定、排序、过滤等功能变得更加简单。在标题“tableviewer edit”中提到的编辑功能,是指`...

    JFace的源码,从官网下的

    2. **Viewers**:JFace的Viewer是一个通用的组件容器,它可以用来展示数据集合,比如TableViewer、TreeViewer等。Viewer提供了丰富的事件处理机制和扩展接口,方便自定义行为。 3. **Dialogs and Wizards**:JFace...

Global site tag (gtag.js) - Google Analytics