Eclipse插件开发,Treeviewer 绑定数据

Eclipse插件开发,Treeviewer 怎么绑定数据,
怎么和DataModelProvider相结合,使用

DataModelProvider 有绑定其他控件的方法:如Text文本控件
synchHelper.synchText(tp,
SampleProjectCreationDataModelProvider.PACKAGE, null);

但是没有绑定直接绑定Treeviewer 的方法。

怎么用DataModelProvider绑定Treeviewer中数据?

[code="java"]
TreeViewer tv = new TreeViewer(c, SWT.BORDER);
tv.setContentProvider(new MyContentProvider());
tv.setLabelProvider(new MyLableProvider());
[/code]

使用TreeViewer的ContentProvider、LabelProvider设置来解决。
不过需要自己实现这两个provider,就类似数据、标签的数据提供者

用的 jface?
[url]http://www.rcp-vision.com/?p=948&lang=en[/url]
[url]http://aquariusm.iteye.com/blog/1208354[/url]

找了个别人写的例子,供你参考
[code="java"]
/**
* 内容提供器。由它决定那些对象应该输出在TreeViewer里显示
/
private static final class MyContentProvider implements ITreeContentProvider {
/
*
* 由这个方法决定树的顶级显示那些对象。在此方法里生成了三个Country对象
* @param inputElement 用tv.setInput()方法输入的那个对象,在这里没有使用这个对象
*/
public Object[] getElements(Object inputElement) {
String[] obj = new String[3];
obj[0] = "中国";
obj[1] = "美国";
obj[2] = "英国";
return obj;
}

    /**
     * 由这个方法决定结点应该显示那些子结点。在这里也不管父结点是什么,每个结点都统一有三个字结点
     * @param parentElement 被点击的结点(父结点)
     */
    public Object[] getChildren(Object parentElement) {
        String[] obj = new String[4];
        obj[0] = "桂林";
        obj[1] = "北京";
        obj[2] = "纽约";
        obj[3] = "伦敦";
        return obj;
    }

    /**
     * 判断某结点是否有子结点。在这里不管3721,全返回真,即都有子结点。这时结点前都有一个“+”号图标
     * @param element 需要判断是否有子的结点
     */
    public boolean hasChildren(Object element) {
        return true;
    }

    /**
     * 取得某结点的父结点。极少需要实现此方法
     */
    public Object getParent(Object element) {
        return null;
    }

    /**
     * 当TreeViewer被销毁时将执行这个方法。极少需要实现此方法
     */
    public void dispose() {}

    /**
     * 当tv.setInput()发生变化时调用此方法。极少需要实现此方法
     */
    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}
}

/**
 * 标签提供器。主要负责每一单个对象在TreeViewer中的显示(文字、图象)
 */
private static final class MyLableProvider implements ILabelProvider {

    /**
     * 显示什么图片
     * @param 结点
     * @return 可以为null值
     */
    public Image getImage(Object element) {
        //            ISharedImages sharedImages = PlatformUI.getWorkbench().getSharedImages();
        //            return sharedImages.getImage(ISharedImages.IMG_OBJS_WARN_TSK);
        return null;
    }

    /**
     * 显示什么文字
     * @param 结点
     * @return 不能为null值 
     */
    public String getText(Object element) {
        return (String) element;

    }

    public void addListener(ILabelProviderListener listener) {}

    public void dispose() {}

    public boolean isLabelProperty(Object element, String property) {
        return false;
    }

    public void removeListener(ILabelProviderListener listener) {}
}

/**
 * 标签提供器。如果你赚上面的MyLableProvider那些没用的方法碍眼,
 * Eclipse中有一个ILabelProvider的缺省实现LabelProvider,继承它也行
 */
//    private static final class MyLableProvider extends LabelProvider {
//        public String getText(Object element) {
//             return (String)element;
//        }
//    }

}

[/code]