tText函数。当TreeViewer得到一个节点后会通过 getText得到此节点的显示文本,通过getImage方法得到节点的显示图标,代码如例程2所示 。
例程2 ViewLabelProvider.java
class ViewLabelProvider extends ILabelProvider{
…
public String getText(Object obj) {
return obj.toString();
}
public Image getImage(Object obj) {
String imageKey = ISharedImages.IMG_OBJ_ELEMENT;
if (obj instanceof TreeParent)
imageKey = ISharedImages.IMG_OBJ_FOLDER;
return PlatformUI.getWorkbench().getSharedImages().getImage(imageKey);
}
…
}
Eclipse开发经典教程之TreeViewer组件(3)
时间:2011-04-11 阿甘
TreeViewer实例
在TreeViewer实例中,一般还要定义树节点的结构。本例中的File对象就能够表示节点的 父子关系,代码如例程3所示。
例程3 FileBrowserTreeViewer.java
/**
* 为了节省篇幅,把所有的import类注释了
* 读者可以通过ctrl+shift+o快捷键,自动引入所依赖的类
* */
public class FileBrowserTreeViewer extends ApplicationWindow {
public FileBrowserTreeViewer() {
super(null);
}
public void run() {
setBlockOnOpen(true);
open();
Display.getCurrent().dispose();
}
protected void configureShell(Shell shell) {
super.configureShell(shell);
shell.setText("File Tree");
shell.setSize(400, 400);
}
protected Control createContents(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
// 父容器分一列显示
composite.setLayout(new GridLayout(1, false));
Button preserveCase = new Button(composite, SWT.CHECK);
preserveCase.setText("&Preserve case");
final TreeViewer tv = new TreeViewer(composite);
// 让树组件两端对齐
tv.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
// 添加内容管理器
tv.setContentProvider(new FileTreeContentProvider());
// 添加标签管理器
tv.setLabelProvider(new FileTreeLabelProvider());
// 设置treeviewer的输入
tv.setInput("root"); // pass a non-null that will be ignored
preserveCase.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
boolean preserveCase = ((Button) event.widget).getSelection();
FileTreeLabelProvider ftlp = (FileTreeLabelProvider) tv
.getLabelProvider();
ftlp.setPreserveCase(preserveCase);
}
});
return composite;
}
public static void main(String[] args) {
new FileBrowserTreeViewer().run();
}
}
//定义内容提供器
class FileTreeContentProvider implements ITreeContentProvider {
public Object[] getChildren(Object arg0) {
//返回树的下一级节点
return ((File) arg0).listFiles();
}
public Object getParent(Object arg0) {
//返回树的上一级节点
return ((File) arg0).getParentFile();
}
public boolean hasChildren(Object arg0) {
Object[] obj = getChildren(arg0);
//判断树是否有下一级节点,true为在节点显示"+"信息
return obj == null ? false : obj.length > 0;
}
public Object[] getElements(Object arg0) {
//打印出树的输入信息,通常用户可以通过输入信息构建树
System.out.println(arg0);
// File.listRoots()作为树的根节点
return File.listRoots();
}
public void dispose() {
}
public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
}
}
//定义标签提供器
class FileTre
|