jface treeViewer 使用说明

这里两天一直在学习eclipse的RCP plugin开发的使用技巧,想用eclipe的插件来实现我之前利用ibator改造的dao生成工具。

看了两天先把 extension的 view看得有点感觉了,这里我先把jface的 treeViewer这个控件说明一下,如何在eclipse的view里面显示一个树状结构的目录树。

 

<extension
         point="org.eclipse.ui.views">
      <category
            name="Sample Category"
            id="test3plugin">
      </category>
           <view
            category="test3plugin"
            class="test3plugin.ViewPartTest"
            icon="icons/alias.gif"
            id="test3plugin.view1"
            name="test3plugin.ViewPartTest"
            restorable="true">
      </view>
      
   </extension>

 

 先在plugin.xml文件中声明一个org.eclipse.ui.views的扩展,这个很简单没有什么好说的了。

然后是创建 test3plugin.ViewPartTest类:

 

import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.ui.JavaElementLabelProvider;
import org.eclipse.jdt.ui.StandardJavaElementContentProvider;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.ITreeViewerListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeExpansionEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.part.ViewPart;

public class ViewPartTest extends ViewPart {

	public ViewPartTest() {
	}

	@Override
	public void createPartControl(Composite parent) {

		TreeViewer viewer = new TreeViewer(parent);
		// Provide members of a compilation unit or class file
		ITreeContentProvider contentProvider = new StandardJavaElementContentProvider(
				true);
		viewer.setContentProvider(contentProvider);
		// There are more flags defined in class JavaElementLabelProvider
		ILabelProvider labelProvider = new JavaElementLabelProvider(
				JavaElementLabelProvider.SHOW_DEFAULT
						| JavaElementLabelProvider.SHOW_QUALIFIED
						| JavaElementLabelProvider.SHOW_ROOT);
		viewer.setLabelProvider(labelProvider);
		// Using the Java model as the viewers input present Java projects on
		// the first level.
		viewer.setInput(JavaCore.create(ResourcesPlugin.getWorkspace()
				.getRoot()));

		viewer.addSelectionChangedListener(new ISelectionChangedListener() {

			@Override
			public void selectionChanged(SelectionChangedEvent event) {

				System.out.println(event.getSource().toString());

			}

		});

		viewer.addTreeListener(new ITreeViewerListener() {

			@Override
			public void treeCollapsed(TreeExpansionEvent event) {
				System.out.println("treeCollapsed:"
						+ event.getElement().toString());
			}

			@Override
			public void treeExpanded(TreeExpansionEvent event) {
				System.out.println("treeExpanded:"
						+ event.getElement().toString());
			}
		});

	}

	@Override
	public void setFocus() {
	}
 

 

这里最关键的是三个方法:

 

  1. setContentProvider
  2. setLabelProvider
  3. setInput
经过查看源代码之后,明白了这个三个方法的意思是这样的:
  1. setContentProvider 提供页面上树节点内容的提供内容,设置IContentProvider类型的对象
  2. setLabelProvider 因为在每个树节点上要显示有图片和现实文字,所以设置IBaseLabelProvider类型的对象
  3. setInput 设置目录树的根节点, 注意这个方法设置的root对象在应用目录显示树上是不现实的。
另外还有两个事件监听接口:
  1. addSelectionChangedListener 当鼠标在树节点上焦点移动之后就会触发这个方法
  2. addTreeListener 这个回调接口的方法是在鼠标双击了树的枝或者叶之后,打开或者关闭节点触发的
值得一提的是以上这几个方法都是用了策略模式来隔离变化。这样可以通过这套代码实现各种复杂的业务需求

你可能感兴趣的:(DAO,eclipse,UI,xml)