首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

15.6  表 格 型 树

过去,表格型树是用TableTreeViewer来实现,自从SWT下的TableTree被废弃之后,其扩展TableTreeViewer也成了鸡肋,不再被建议使用。既然Tree可以实现表格型树,那么其扩展TreeViewer当然也没问题。用TreeViewer实现的表格型树,15.5节TreeViewer实例的菜单等功能代码不用做任何修改。本节实例效果如图15.6所示。

图15.6 TreeViewer实现的表格型树

还是基于15.5节实现代码修改。修改得不多,一是在主程序为树加上几个列对象TreeColumn,二是创建一个新的用于表格型树的标签器。关于TreeColumn,在讲Tree组件一节时就已提到过,在这里的使用也和以前一样,主程序的代码如下所示:

//-----------完整代码见文件:TreeViewer3.java---------------

……

TreeViewer tv = new TreeViewer(shell, SWT.BORDER);

Tree tree = tv.getTree();

tree.setHeaderVisible(true);

TreeColumn column = new TreeColumn(tree, SWT.LEFT);

column.setText("名称");

column.setWidth(150);

column = new TreeColumn(tree, SWT.LEFT);

column.setText("子结点数");

column.setWidth(80);

column = new TreeColumn(tree, SWT.LEFT);

column.setText("性别");

column.setWidth(40);

tv.setContentProvider(new TreeViewerContentProvider());

tv.setLabelProvider(new MyTableLableProvider());

……

标签器换了一个,它必须实现ITableLabelProvider接口,其代码如下:

public class MyTableLableProvider implements ITableLabelProvider {

         public String getColumnText(Object element, int columnIndex) {

                   ITreeEntry entry = (ITreeEntry) element;

                   switch (columnIndex) {  //根据列号,来决定显示记录的哪个字段值

                            case 0:

                                     return entry.getName();

                            case 1:

                                     List list = entry.getChildren();

                                     if (list == null)

                                               return "";

                                     return String.valueOf(list.size());

                            case 2:

                                     if (entry instanceof PeopleEntity) {

                                               boolean sex = ((PeopleEntity) entry).isSex();

                                               return sex ? "男" : "女";

                                     }

                                     return "";

                            default:

                                     return "";

                   }

         }

    //-----------------------以下方法暂时不用,空实现---------------------------

         public Image getColumnImage(Object element, int columnIndex) {          return null;        }

         public void addListener(ILabelProviderListener listener) {}

         public void removeListener(ILabelProviderListener listener) {}

         public void dispose() {}

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

}

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论