当前位置: 首页 > news >正文

JFace中的表格型树TableTreeViewer

表格型树是用TableTreeViewer来实现,自从SWT下的TableTree被废弃之后,其扩展TableTreeViewer也成了鸡肋,不再被建议使用,既然Tree可以实现表格型树,那么其扩展TreeView当然也没有问题,用TreeViewer实现的表格型树,之前的TreeViewer实例菜单的呢过功能代码不用做任何修改.

修改的不多,一是在主程序为树加上几列对象TreeColumn,二是创建一个新的表格型树的标签器,关于TreeColumn在Tree组件的时候有此内容的讲解.这个地方和之前一样.

TreeViewer3.java

复制代码
 1 public class TreeViewer3 {
 2     public static void main(String[] args) {
 3         new TreeViewer3().open();
 4     }
 5 
 6     public void open() {
 7         final Display display = new Display();
 8         final Shell shell = new Shell();
 9         shell.setSize(300, 300);
10         // -----------界面核心代码-------------------
11         shell.setLayout(new FillLayout());
12         TreeViewer tv = new TreeViewer(shell, SWT.BORDER);
13 
14         Tree tree = tv.getTree();
15         tree.setHeaderVisible(true);
16         TreeColumn column = new TreeColumn(tree, SWT.LEFT);
17         column.setText("名称");
18         column.setWidth(150);
19         column = new TreeColumn(tree, SWT.LEFT);
20         column.setText("子结点数");
21         column.setWidth(80);
22         column = new TreeColumn(tree, SWT.LEFT);
23         column.setText("性别");
24         column.setWidth(40);
25 
26         tv.setContentProvider(new TreeViewerContentProvider());
27         tv.setLabelProvider(new MyTableLableProvider());
28         // 和TableViewer一样,数据的入口也是setInput方法
29         List<Country> input = (List)DataFactory.createTreeData();
30         tv.setInput(input);
31         // --------------插入代码:START------------------
32         MyActionGroup actionGroup = new MyActionGroup(tv);// 生成一个ActionGroup对象
33         actionGroup.fillContextMenu(new MenuManager());// 将按钮注入到菜单对象中
34         // -----------END------------------
35         shell.open();
36         while (!shell.isDisposed()) {
37             if (!display.readAndDispatch())
38                 display.sleep();
39         }
40         display.dispose();
41     }
42 }
复制代码

标签器换了一个,它必须实现ITableLabelProvider接口.

复制代码
 1 public class MyTableLableProvider implements ITableLabelProvider {
 2     public String getColumnText(Object element, int columnIndex) {
 3         ITreeEntry entry = (ITreeEntry) element;
 4         switch (columnIndex) {
 5         case 0:
 6             return entry.getName();
 7         case 1:
 8             List list = entry.getChildren();
 9             if (list == null)
10                 return "";
11             return String.valueOf(list.size());
12         case 2:
13             if (entry instanceof People) {
14                 boolean sex = ((People) entry).isSex();
15                 return sex ? "男" : "女";
16             }
17             return "";
18         default:
19             return "";
20         }
21     }
22 
23     public Image getColumnImage(Object element, int columnIndex) {
24         return null;
25     }
26     public void addListener(ILabelProviderListener listener) {}
27     public void removeListener(ILabelProviderListener listener) {}
28     public void dispose() {}
29     public boolean isLabelProperty(Object element, String property) {
30         return false;
31     }
32 }
复制代码


本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/4178219.html,如需转载请自行联系原作者

相关文章:

  • IE8中HTTP连接数目的变化
  • 实时游戏对战引擎Photon
  • python入门系列之一:Centos6下python2.7的安装
  • Skype For Business 2015实战系列19:统一通讯之配置Exchange 2013 SP1
  • nginx部署
  • redhat 6.5 配置WAS控制台中文
  • filebeat 配置文件详解
  • windows用户和组及其权限的设置
  • 磁盘安装启动的方法与ASM
  • MySQL解析器源码分析--对select语句中子查询处理逻辑的分析(一)
  • 使用.net 2.0开发多层架构的系统之一——本网站2006-10-01版本源代码公布
  • Day18 Django的深入使用
  • 谁还原了你的数据库?
  • 根据MAC地址查询IP地址
  • 安装配置samba服务器和客户端
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 2019年如何成为全栈工程师?
  • express + mock 让前后台并行开发
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • Git同步原始仓库到Fork仓库中
  • js如何打印object对象
  • Linux gpio口使用方法
  • miaov-React 最佳入门
  • Promise初体验
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • Spring框架之我见(三)——IOC、AOP
  • vue数据传递--我有特殊的实现技巧
  • windows下使用nginx调试简介
  • 从零搭建Koa2 Server
  • 解析 Webpack中import、require、按需加载的执行过程
  • 坑!为什么View.startAnimation不起作用?
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​configparser --- 配置文件解析器​
  • !!Dom4j 学习笔记
  • (12)Linux 常见的三种进程状态
  • (2)Java 简介
  • (function(){})()的分步解析
  • (javascript)再说document.body.scrollTop的使用问题
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)setTimeout 和 setInterval 的区别
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • ***检测工具之RKHunter AIDE
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .bat批处理出现中文乱码的情况
  • .md即markdown文件的基本常用编写语法
  • .NET Framework与.NET Framework SDK有什么不同?
  • .Net面试题4
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • .sys文件乱码_python vscode输出乱码