1 TreeViewer中的内容提供器函数的说明:
继承的接口是:ITreeContentProvider
里面的方法如下:
(1)getElements。
此函数定义为“public Object[] getElements(Object inputElement);”,当程序开始构建树时,首先调用getElements返回一个对象的数组,此数组对象表示当前树的根节点,inputElement参数为TreeViewer的输入(setInput的输入数据)。
(2)hasChildren。
此函数定义为“public boolean hasChildren(Object element);”,当TreeViewer显示一个节点后,会调用hasChildren函数判断当前节点是否有子节点,如果有子节点则显示“+”,element参数为要判断是否有子节点的节点。
(3)getChildren。
此函数定义为“public Object[] getChildren(Object parentElement);”,当用户选择节点打开子节点时,会调用getChildren函数返回下一层子节点,parentElement参数为选择的节点。
(4)getParent。
此函数定义为“public Object getParent(Object element);”,可以通过此方法返回element的父节点。
(5)inputChanged。
此函数定义为“public void inputChanged(Viewer viewer, Object oldInput, Object newInput);”,当输入改变时调用此方法。
(6)dispose。
此函数定义为“public void dispose();”,当树销毁时被调用。
其中,getElements、hasChildren和getChildren是常用的方法,用户通过重写这几种方法构建一棵树,过程如下:通过getElements方法得到根,再通过hasChildren判断根下是否有子节点,如果有子节点,可以通过getChildren得到所有的子节点。
以后为获取资源管理器的代码:
public class FileTreeContentProvider implements ITreeContentProvider{
@Override
public Object[] getChildren(Object parentelement) {
return ((File)parentelement).listFiles(new AllowOnlyFoldersFilter());
}
@Override
public Object[] getElements(Object arg0) {
File[] roots=File.listRoots();//获取根目录列表
System.out.println(roots[1]);
List rootFolders=new ArrayList();
for(int i=0;i<roots.length;i++)
{
if(roots[i].isDirectory())
rootFolders.add(roots[i]);
}
return rootFolders.toArray();
}
@Override
public boolean hasChildren(Object parentElement) {
Object[] obj=getChildren(parentElement);
return obj==null?false:obj.length>0;
}
@Override
public Object getParent(Object element) {
return ((File)element).getParentFile();
}
@Override
public void dispose() {
// TODO Auto-generated method stub
}
@Override
public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
// TODO Auto-generated method stub
}
}
public class AllowOnlyFoldersFilter implements FileFilter{
public boolean accept(File pathname)
{
return pathname.isDirectory();
}
}
2 对于TableViewer内容提供器函数说明
继承借口:IStructuredContentProvider
相应方法:
(1)getElements定义为“public Object[] getElements(Object inputElement)”,返回Object[]对象数组,其中数组中每一个对象代表表格的一列。当TableViewer输入数据后,内容管理器将根据输入数据构造表格对象数据。
class FileTableContentProvider implements IStructuredContentProvider{
@Override
public void dispose() {
// TODO Auto-generated method stub
}
@Override
public Object[] getElements(Object inputElement) {
File file=(File)inputElement;
return file.listFiles();
}
@Override
public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
// TODO Auto-generated method stub
}
}
3 TreeViewer的标签提供器ILabelProvider
ILabelProvider主要实现getImage和getText函数。当TreeViewer得到一个节点后会通过getText得到此节点的显示文本,通过getImage方法得到节点的显示图标
4TableViewer的标签提供器ITableLabelProvider
getColumnText:此函数定义为“public String getColumnText(Object element, int columnIndex)”,其中element表示单元格所在行的对象,columnIndex表示单元格所在的列,返回显示的文本
getColumnImage:此函数定义为“public Image getColumnImage(Object element, int columnIndex)”,其中element表示单元格所在行的对象,columnIndex表示单元格所在的列,返回此单元格的显示图标
class FileTableLabelProvider implements ITableLabelProvider{
@Override
public void addListener(ILabelProviderListener arg0) {
// TODO Auto-generated method stub
}
@Override
public void dispose() {
// TODO Auto-generated method stub
}
@Override
public Image getColumnImage(Object element, int index) {
// TODO Auto-generated method stub
return null;
}
@Override
public String getColumnText(Object arg0, int arg1) {
File file=(File)arg0;
if(arg1==0)
return file.getName();
if(arg1==1){
if(file.isDirectory())
return "文件夹";
else
return "文件";
}
if(arg1==2)
{
if(file.isDirectory())
return "";
else
return file.length()+"kb";
}
if(arg1==3)
{
Date date=new Date(file.lastModified());
return date.toLocaleString();
}
return null;
}
@Override
public boolean isLabelProperty(Object arg0, String arg1) {
// TODO Auto-generated method stub
return false;
}
@Override
public void removeListener(ILabelProviderListener arg0) {
// TODO Auto-generated method stub
}
public FileTableLabelProvider() {
// TODO Auto-generated constructor stub
}
}