Eclipse 插件开发之 树形视图展示要点
2017-02-14 11:31
357 查看
一、开发需求
1、读取文件中的数据,用树形结构视图展现。 2、添加一个过滤器,可以过滤所需的数据,可以模糊查询。
二、构建树形视图需要:
视图查看器:TreeViewer,内容提供器:ContentProvider ,标签提供器:LabelProvider; 建立树的模型:包括树的父节点,树的子节点。
代码如下:
父节点:
Class ComponentTreeParent extends ComponentTreeObject { private ArrayList<ComponentTreeObject > children ; public ConponentTreeParent (String name){ super(name); children =new ArrayList<ComponentTreeObject >(); } public void addChild(ComponentTreeObject child ){ children.add(child); child.setParent(this); child.setType(this.getName() ); } public void removeChild( ComponentTreeObject child ){ children.remove(child); children.setParent(null); } public ComponentTreeObject [ ] getChildren () { return (ComponentTreeObject [ ] ) children.toArray( new ComponentTreeObject [children.size( )]); } public boolean hasChildren () { return children.size()>0; } }
子节点:
Class ComponentTreeObject implements IAdaptable { private String name; private String type; private String desp ; private ComponentTreeParent parent ; public ComponentTreeObject (String name ){ this.name = name; } public String getType () { return this.type; } public void setType (String type) { this.type = type; } public String getName () { return name ; } public String getDesp(){ return desp; } public void setDesp(){ this.desp =desp; } public void setParent (ComponentTreeParent parent){ this.parent = parent ; } public ComponentTreeParent getParent () { return parent ; } public String toString () { return getName () ; } public <T> T getAdapter (Class <T> key ){ return null; } }
内容提供器:ViewContentProvider
Class ViewContentProvider implements ITreeContentProvider { private ComponentTreeParent invidibleRoot; public Object[ ] getElements (Object parent ) { if (parent .equals (getViewSite ( ))) { if (invisibleRoot == null ; initialize (); return getChildren ( invisibleRoot ); } return getChildren(parent ); } public Object getParent (Object child) { if (child instanceof ComponentTreeObject ){ return ((ComponentTreeObject )child ) .getParent( ); } return null ; } public Object [ ] getChildren (Object parent ) { if (parent instanceof ComponentTreeParent ){ return ((ComponentTreeParent 4000 )parent.getChildren() ; } return new Object[0] ; } public boolean hasChildren (Object parent ) { if (parent instanceof ComponentTreeParent ){ return ((ComponentTreeParent )parent.hasChildren() ; } return false; } private void initialize () { Tree tree = viewer.getTree(); tree.setHeaderVisible(true); tree.setLinesVisible(true); TreeColumn column =new TreeColumn (tree,SWT.LEFT); column .setText("名称"); column.setWidth(300); column =new TreeColumn (tree,SWT.LEFT); column .setText("描述"); column.setWidth(500); ComponentTreeParent tp = null; ComponentTreeObject to = null; invisibleRoot = new ComponentTreeParent (" "); Map<String , ComponentTreeParent> map = new HashMap<String , Component>(); //按相对路径读取文件 try { URL url = Activator.getDefault().getBundle().getEntry(FILE_URL); URL fileUrl = FileLocator.toFileURL(url); URI fileURI = new URI( fileUrl.getProtocol ( ), fileUrl.getPath(),null); BufferedReader bufr = new BufferedReader( new InputStreamReader (new FileInputStream(new File(fileURI)), "UTF-8")); for( String line = bufr.readLine(); line != null; line = bufr.readLine()) { String [ ] str = line.split("/"); for (int i = 0;i<str.length; i++){ str[i] = str[i].trim(); } if (!map.containsKey(str[0])){ tp = new ComponentTreeParent(str[0]); map.put(str[0],tp); invisibleRoot.addChild(tp); tp.setParent(invisibleRoot); to = new ComonentTreeObject(str[1]); if(str.length>2 ){ to.setDesp(str[2]); if(str.length>3){ tp.setDesp(str[3]); } } tp.addChild(to); to.setParent(tp); }else{ tp = map.get(str[0]); to = new ComonentTreeObject(str[1]); if(str.length>2 ){ to.setDesp(str[2]); } tp.addChild(to); to.setParent(tp); } } bufr.close(); }catch (FileNotFoundException e){ e.printStackTrace(); }catch (URISyntaxException e){ e.printStackTrace(); }catch (IOException e){ e.printStackTrace(); } }
标签提供者 :ViewLableProvider
Class ViewLableProvider extends LableProvider implements ITableLableProvider { @override public Image getColumnImage(Object obj,int columnIndex) { switch (columnIndex){ case 0: String imagKey = ISharedImages.IMG_OBJ_ELEMENT; if(obj instanceof ComponentTreeParent) imageKey = IShareImages.IMG_OBJ_FOLDER; return PlatformUI.getWorkbench().getSharedImages().getImage(imagekey); case 1: return null; default: return null; } } @override public String getColumnText(Object obj,int columnIndex){ ComponentTreeObject treeObject = (ComponentTreeObject)obj; switch(columnIndex){ case 0: return treeObject.getName(); case 1: return treeObject.getDesp(); default: return ""; } } }
创建视图
public void createPartControl(Composite parent){ //视图过滤器 FilteredTree filterTree = new FilteredTree(parent,SWT.MULTI|SWT.V_SCROLL|SWT.H_SCROLL|SWT.SINGLE),new PattrenFilter(),true); viewer = filterTree.getViewer(); drillDownAdapter = new DrillDownAdapter (viewer); viewer.setContentProvider(new ViewContentProvider()); viewer.setLableProvider(new ViewLablePsrovider()); viewer.setInput(getViewSite()); PlatformUI.getWorkbench().getHelpSystem().setHelp(viewer.getControl(),"ComponentView.viewer"); getSite().getSelectionProvider(viewer); makeActions(); hookContextMenu(); hookDoubleClickAction(); contributeToActionBars(); }
相关文章推荐
- rcp(插件开发)org.eclipse.ui.menus-可以添加在视图上
- 关于Eclipse插件开发(四)-------给视图加下拉菜单和按钮和加入编辑器.
- JS插件开发 - GIS地图打点视图展示
- 给eclipse安装CDT插件开发C/C++工程[转]
- windows下用eclipse+goclipse插件+gdb搭建go语言开发调试环境
- 【Eclipse提高开发速度-插件篇】安装VJET插件,JS等提示开发插件
- eclipse插件开发中全局对象的获取
- Android深入浅出系列之Android开发环境搭建—Eclipse插件ADT(四)
- eclipse插件开发(1)-获取工程对象
- Google Web Toolkit 和goooglipse(GWT eclipse 插件)开发ajax
- WEB开发中前后台树形菜单的展示设计
- Eclipse插件开发之基础篇(1) 插件开发的基础知识
- 一个调试JSP的Eclipse插件的开发
- Eclipse插件开发 目录
- Eclipse添加C/C++开发插件
- windows下搭建基于eclipse插件的GoLang开发环境
- 为Eclipse安装安卓开发插件ADT
- eclipse插件开发,调试运行,导出与安装
- Eclipse入门-- Eclipse的使用简介及插件开发
- 在Bootstrap开发框架中使用bootstrapTable表格插件和jstree树形列表插件时候,对树列表条件和查询条件的处理