读书人

RCP GridViewer的学习使用

发布时间: 2012-10-14 14:55:08 作者: rapoo

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();
??
?}
}

读书人网 >软件架构设计

热点推荐