您的位置:首页 > 编程语言 > Java开发

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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: