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

RCP GridViewer的学习应用

阅读更多

package com.easyway.tbs.commons.ext.views.gridviewer;

import static com.easyway.tbs.commons.ext.model.PersonGridViewerConstants.GRID_VIEWER_PERSONLIST_COLUMNHEADER;
import static com.easyway.tbs.commons.ext.model.PersonGridViewerConstants.GRID_VIEWER_PERSONLIST_POSTLIST;
import static com.easyway.tbs.commons.ext.model.PersonGridViewerConstants.GRID_VIEWER_PERSONLIST_PROPERTIES;
import static com.easyway.tbs.commons.ext.model.PersonGridViewerConstants.GRID_VIEWER_PERSONLIST_SEXLIST;

import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.CheckboxCellEditor;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ComboBoxCellEditor;
import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.nebula.jface.gridviewer.GridTableViewer;
import org.eclipse.nebula.jface.gridviewer.GridViewerColumn;
import org.eclipse.nebula.widgets.grid.Grid;
import org.eclipse.nebula.widgets.grid.GridColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.part.ViewPart;

import com.easyway.tbs.commons.ext.model.commons.CommonContentProvider;
import com.easyway.tbs.commons.ext.model.commons.CommonLableProvider;
import com.easyway.tbs.commons.ext.model.commons.CustomTextCellEditor;
/**
 * GridViewer的学习应用
 * @author longgangbai
 *
 */
public class ExtGridViewer extends ViewPart {
   public static final String ID = "com.easyway.tbs.commons.ext.views.gridviewer.ExtGridViewer"; //$NON-NLS-1$
   public GridTableViewer gridTableViewer;
   public ExtGridViewer() {
   }
   private void createGirdViewer(Composite parent){
      gridTableViewer = new GridTableViewer(parent, SWT.BORDER| SWT.H_SCROLL| SWT.V_SCROLL|SWT.FULL_SELECTION);
      Grid gird = gridTableViewer.getGrid();
            gird.setHeaderVisible(true);
            gird.setAutoHeight(true);
            gird.setLinesVisible(true);
            gird.setCellSelectionEnabled(true);
            //创建列头信息
   createGridColum();
   //创建cellEditors
   CellEditor[] celleditors = createCellEditors();
   ICellModifier modifier = new GridViewerCellModifier(gridTableViewer);
   //设置列属性
   gridTableViewer.setColumnProperties(GRID_VIEWER_PERSONLIST_PROPERTIES);
   gridTableViewer.setCellEditors(celleditors);
   gridTableViewer.setCellModifier(modifier);
   gridTableViewer.setContentProvider(new CommonContentProvider());
   gridTableViewer.setLabelProvider(new CommonLableProvider());
   gridTableViewer.setInput(getSite());
   }

 /**
  * 创建编辑列对象
  * @return
  */
 private CellEditor[] createCellEditors() {
  CellEditor[] celleditors = new CellEditor[GRID_VIEWER_PERSONLIST_COLUMNHEADER.length];
  //用户名
  Grid grid = gridTableViewer.getGrid();
  celleditors[0] = new TextCellEditor(grid);
  //职务
  celleditors[1] = new ComboBoxCellEditor(grid,GRID_VIEWER_PERSONLIST_POSTLIST);
  //地址
  celleditors[2] = new TextCellEditor(grid);
  //电子邮件
  celleditors[3] = new CustomTextCellEditor(grid,null);
  //验证码
  celleditors[4] = new TextCellEditor(grid);
     //年龄
  celleditors[5] =null;
  //性别
  celleditors[6] =new ComboBoxCellEditor(grid,GRID_VIEWER_PERSONLIST_SEXLIST,SWT.PUSH);
  
  //在职
  celleditors[7] = new CheckboxCellEditor(grid);
  return celleditors;
 }

 
   /**
    * 创建Grid的列头的信息
    */
 private void createGridColum() {
  for (String columnHeaderName : GRID_VIEWER_PERSONLIST_COLUMNHEADER) {
   GridViewerColumn column=new GridViewerColumn(gridTableViewer, SWT.NONE);
   GridColumn gridColumn =column.getColumn();
   gridColumn.setAlignment(SWT.CENTER);
   gridColumn.setResizeable(true);
   gridColumn.setText(columnHeaderName);
   gridColumn.setWidth(104);
   column.setLabelProvider(new ColumnLabelProvider());
  }
 }

 /**
  * Create contents of the view part.
  * @param parent
  */
 @Override
 public void createPartControl(Composite parent) {
  Composite container = new Composite(parent, SWT.NONE);
  container.setLayout(new FillLayout());
  //创建GridViewer信息
  createGirdViewer(container);
  createActions();
  initializeToolBar();
  initializeMenu();
 }

 /**
  * Create the actions.
  */
 private void createActions() {
  // Create the actions
 }

 /**
  * Initialize the toolbar.
  */
 private void initializeToolBar() {
  IToolBarManager toolbarManager = getViewSite().getActionBars()
    .getToolBarManager();
 }

 /**
  * Initialize the menu.
  */
 private void initializeMenu() {
  IMenuManager menuManager = getViewSite().getActionBars()
    .getMenuManager();
 }

 @Override
 public void setFocus() {
  // Set the focus
 }

}
package com.easyway.tbs.commons.ext.views.gridviewer;

import org.apache.commons.beanutils.PropertyUtils;
import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.nebula.jface.gridviewer.GridTableViewer;
import org.eclipse.nebula.widgets.grid.GridItem;
import static com.easyway.tbs.commons.ext.model.PersonGridViewerConstants.GRID_VIEWER_PERSONLIST_SEXLIST;
import static com.easyway.tbs.commons.ext.model.PersonGridViewerConstants.GRID_VIEWER_PERSONLIST_POSTLIST;
/**
 * 列修改的接口实现类
 * @author longgangbai
 *
 */
public class GridViewerCellModifier implements ICellModifier {

 private GridTableViewer tableViewer;
 
 public GridViewerCellModifier(GridTableViewer tableViewer){
  this.tableViewer=tableViewer;
 }
 /**
  * 列是否可以修改
  */
 @Override
 public boolean canModify(Object element, String property) {
  return true;
 }
    /**
     * 根据属性名称获取对应的值
     */
 @Override
 public Object getValue(Object element, String property) {
  try {
     Object value=PropertyUtils.getProperty(element, property);
     if(property.equals("sex")){
     return value.equals("男")?Integer.valueOf(1):Integer.valueOf(0);
     }else if(property.equals("postName")){
      String aa=new String(value.toString().getBytes(),"UTF-8");
      for(int i=0;i<GRID_VIEWER_PERSONLIST_POSTLIST.length;i++){
       if(GRID_VIEWER_PERSONLIST_POSTLIST[i].equals(aa)){
         return Integer.valueOf(i);
       }
      }
      return  0;
     }
     return value;
  } catch (Exception e) {
   e.printStackTrace();
  }
  return null;
 }
    /**
     * 修改的列的信息
     * 关于单元格的验证的信息添加此方法中(如果为下拉框的数据在这里)
     */
 @Override
 public void modify(Object element, String property, Object value) {
  try {
   if(element instanceof GridItem){
    
    Object objectDis=((GridItem)element).getData();
    String valueString=value!=null?String.valueOf(value):"";
    Object object=null;
    if(valueString.length()>0){
     if(property.equals("age"))
     {
      object=Integer.valueOf(valueString);
     }else if(property.equals("sex")){
      object=GRID_VIEWER_PERSONLIST_SEXLIST[Integer.valueOf(valueString)];
     }else if(property.equals("postName")){
      object=GRID_VIEWER_PERSONLIST_POSTLIST[Integer.valueOf(valueString)];
     }else if(property.equals("exists")){
      object =Boolean.valueOf("true");
     }else{
         object=valueString; 
     }
     if(object!=null){
      PropertyUtils.setProperty(objectDis, property, object);
     }
    }
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
  tableViewer.refresh(true);
 }

}

package com.easyway.tbs.commons.ext.views.gridviewer;

import java.util.ArrayList;
/**
 *
 * 关于GridViewer的学习
 * @author longgangbai
 *
 */
public class GridViewerTest {
 public final static String[] GRID_VIEWER_PERSONLIST_COLUMNHEADER={"用户名","职务","地址","电子邮件","验证码","年龄","性别","在职"};
 public final static String[] GRID_VIEWER_PERSONLIST_PROPERTIES={"userName","postName","address","email","password","age","sex","exists"};
 public final static String[] GRID_VIEWER_PERSONLIST_POSTLIST={"1","2","3"};
 public final static String[] GRID_VIEWER_PERSONLIST_SEXLIST={"女","男"};
 
 public static void main(String[] args) {
  Display display=Display.getDefault();
  Shell shell =new Shell(display);
  GridTableViewer   gridTableViewer = new GridTableViewer(shell, SWT.BORDER| SWT.H_SCROLL| SWT.V_SCROLL|SWT.FULL_SELECTION);
     Grid gird = gridTableViewer.getGrid();
     gird.setSize(1000, 600);
        gird.setHeaderVisible(true);
        gird.setAutoHeight(true);
        gird.setLinesVisible(true);
        gird.setCellSelectionEnabled(true);
       
        for (String columnHeaderName : GRID_VIEWER_PERSONLIST_COLUMNHEADER) {
   GridViewerColumn column=new GridViewerColumn(gridTableViewer, SWT.NONE);
   GridColumn gridColumn =column.getColumn();
   gridColumn.setAlignment(SWT.CENTER);
   gridColumn.setResizeable(true);
   gridColumn.setText(columnHeaderName);
   gridColumn.setWidth(104);
   column.setLabelProvider(new ColumnLabelProvider());
  }

  //创建cellEditors
  
  CellEditor[] celleditors = new CellEditor[GRID_VIEWER_PERSONLIST_COLUMNHEADER.length];
  Grid grid = gridTableViewer.getGrid();
  
  //用户名
  celleditors[0] = new TextCellEditor(grid);
  //职务
  celleditors[1] = new ComboBoxCellEditor(grid,GRID_VIEWER_PERSONLIST_POSTLIST);
  //地址
  celleditors[2] = new TextCellEditor(grid);
  //电子邮件
  celleditors[3] = new CustomTextCellEditor(grid,null);
  //验证码
  celleditors[4] = new TextCellEditor(grid);
     //年龄
  celleditors[5] =null;
  //性别
  celleditors[6] =new ComboBoxCellEditor(grid,GRID_VIEWER_PERSONLIST_SEXLIST,SWT.PUSH);
  
  //在职
  celleditors[7] = new CheckboxCellEditor(grid,SWT.PUSH);
  
  ICellModifier modifier = new GridViewerCellModifier(gridTableViewer);
  //设置列属性
  gridTableViewer.setColumnProperties(GRID_VIEWER_PERSONLIST_PROPERTIES);
  gridTableViewer.setCellEditors(celleditors);
  gridTableViewer.setCellModifier(modifier);
  gridTableViewer.setContentProvider(new CommonContentProvider());
  gridTableViewer.setLabelProvider(new CommonLableProvider());
  List<Person> personList=new ArrayList<Person>();
  for (int i = 0; i < 100; i++) {
   Person p=new Person();
   p.setUserName("xiaobai "+i);
   p.setAge(20+i);
   p.setEmail("longgangbai@sina.com");
   p.setAddress("jiangsun");
   p.setPassword("pwd "+i);
   p.setPostName("1");
   p.setSex("男");
   personList.add(p);
  }
  gridTableViewer.setInput(personList);
  shell.open();
  
  while(!display.isDisposed())
  {
    if(!display.readAndDispatch())
    {
     display.sleep();
    }
  }
  
  display.dispose();
  
 }
}

分享到:
评论

相关推荐

    RCP的VIEWER和EDITOR

    `com.free.view.treeview`这个文件很可能包含了一个树形VIEWER的实现,这为学习和理解RCP的VIEWER机制提供了一个实例。通过研究这个例子,开发者可以更好地掌握如何在RCP中创建和使用自定义视图。

    BIRT 报表 RCP Report Viewer

    BIRT 报表 RCP Report Viewer 找了好久没有找到关于 BIRT 集成到RCP中的文章,现在先发两个例子先,详细待日后补充: Example of using the Report Viewer in an RCP application 见附件:

    BIRT 报表 RCP Report Viewer(2)

    BIRT 报表 RCP Report Viewer 找了好久没有找到关于 BIRT 集成到RCP中的文章,现在先发两个例子先,详细待日后补充: Example of using the Report Viewer in an RCP application 见附件:

    基于Eclipse RCP的复合应用

    Eclipse Rich Client Platform (RCP)...总之,“基于Eclipse RCP的复合应用”是一个深入探讨如何利用Eclipse RCP框架构建复杂桌面应用的主题,对于希望在该领域学习和工作的开发者来说,这是一个非常有价值的学习资源。

    eclipse rcp应用系统开发方法与实战源代码.zip

    在"eclipse rcp应用系统开发方法与实战源代码.zip"中,我们可以学习到以下关键知识点: 1. **Eclipse RCP架构**:理解Eclipse RCP的基础架构非常重要,包括插件(Plugins)、工作台(Workbench)、视图(Views)、...

    eclipse rcp 插件开发学习笔记.pdf 15-24章

    9. **第23章:插件开发实例** - 这一章可能包含了一些实际的案例研究,演示了如何将前面学习的理论知识应用于实际项目,提供了从头到尾构建Eclipse RCP插件的详细步骤。 10. **第24章:GEF实例** - 作为对第22章的...

    RCP项目学习实例

    6. **程序集成功能**:学习如何打包RCP应用程序,包括生成产品配置、创建可执行的RCP发布版本,以及理解产品文件(product file)的作用。 7. **运行时环境**:理解Eclipse运行时环境的结构,包括如何设置启动配置...

    ECLIPSE+RCP应用系统开发方法与实战(PDF 高岗著)

    5. **命令和服务**:Eclipse RCP中的命令(Command)和服务(Service)机制,用于实现应用的可扩展性和互操作性,读者将学习如何定义和使用这些组件。 6. **透视图和工作台**:透视图(Perspective)定义了工作空间...

    ECLIPSE+RCP应用系统开发方法与实战

    非常好的一本JAVA RCP入门实战的书,兼顾理论和实战。

    rcp学习好资料

    4. **Windows集成**:学习如何在RCP应用中嵌入和使用Active X控件,增强应用功能。 5. **3D图形**:探索如何将OpenGL与Eclipse RCP结合,为应用添加高性能的3D图形支持。 通过这些资料,开发者可以从基础到进阶全面...

    开发您的第一个 Eclipse RCP 应用程序

    ### 开发您的第一个 Eclipse RCP 应用程序 #### 富客户端平台 (RCP) 概述 **Eclipse Rich Client Platform (RCP)** 是一个强大的框架,旨在...随着不断深入学习和实践,您将能构建出更为复杂和专业的 RCP 应用程序。

    实现 RCP 应用程序的步骤

    **实现RCP应用程序的步骤详解** RCP(Rich Client Platform)是Eclipse框架提供的一种用于构建桌面应用程序的平台。它允许开发者利用Eclipse的强大功能来创建功能丰富的、可扩展的应用程序,而无需从零开始编写所有...

    org.eclipse.nebula.widgets.grid_1.0.0.jar_gridview_everyt8y_

    标题中的"org.eclipse.nebula.widgets.grid_1.0.0.jar_gridview_everyt8y_"暗示了我们正在讨论的是Eclipse Nebula项目中的一个...通过学习和利用GridViewer,开发者可以创建出功能丰富、用户体验优良的桌面应用程序。

    [基于Eclipse.RCP的复合应用开发].扈晓炜等.扫描版

    通过对《基于Eclipse.RCP的复合应用开发》的学习,开发者可以掌握构建强大、灵活的桌面应用程序的技术,这些应用程序可以满足各种业务需求,并具备优秀的用户体验。同时,Eclipse RCP的广泛应用也使其成为软件开发者...

    Eclipse RCP 应用系统开发方法与实战

    Eclipse Rich Client Platform (RCP) 是一个...通过深入学习"Eclipse RCP 应用系统开发方法与实战",开发者不仅可以掌握构建复杂桌面应用的技能,还能了解到如何利用Eclipse RCP的灵活性和强大功能来满足各种定制需求。

    Eclipse RCP应用系统开发方法与实战(第四章)

    在这一章中,你还将学习如何调试和测试RCP应用,以及如何打包和部署应用程序,以便用户能够在本地机器上运行。这包括生成可执行的RCP产品和理解产品配置文件(product.ini)。 最后,我们还会讨论一些高级主题,如...

    通过例子学习EclipseRCP开发

    Eclipse RCP(Rich Client Platform)是Eclipse框架下的一个组件,它提供了一种构建桌面应用程序的强有力平台。本教程将通过实例引导你深入理解Eclipse RCP的开发过程,帮助你掌握如何利用Eclipse的强大功能来创建...

    eclipse RCP学习项目源码&amp;扩展控制台插件for eclipse3.5

    这个压缩包包含的“eclipse RCP学习项目源码&扩展控制台插件for eclipse3.5”是针对Eclipse 3.5版本的一个学习资源,它涵盖了RCP应用开发的基础和如何创建自定义控制台插件。 首先,RCP项目源码是理解Eclipse RCP...

Global site tag (gtag.js) - Google Analytics