关于JFace带复选框的树

树的复选框用CheckboxTreeViewer实现.由于其子类ContainerCheckedTreeViewer在没有选择全部子节点时可以自动将父节点设置成灰选,所以实现树的复选框更多的是用ContainerCheckedTreeViewer.

TreeView4.java

 1 public class TreeViewer4 {
 2     public static void main(String[] args) {
 3         new TreeViewer4().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         // 用ContainerCheckedTreeViewer完全替换TreeViewer
13         ContainerCheckedTreeViewer tv = new ContainerCheckedTreeViewer(shell, SWT.BORDER);
14         tv.setUseHashlookup(true); // 加快查找速度
15
16         Tree tree = tv.getTree();
17         tree.setHeaderVisible(true);
18         TreeColumn column = new TreeColumn(tree, SWT.LEFT);
19         column.setText("名称");
20         column.setWidth(150);
21         column = new TreeColumn(tree, SWT.LEFT);
22         column.setText("子结点数");
23         column.setWidth(80);
24         column = new TreeColumn(tree, SWT.LEFT);
25         column.setText("性别");
26         column.setWidth(40);
27
28         tv.setContentProvider(new TreeViewerContentProvider());
29         tv.setLabelProvider(new MyTableLableProvider());
30         // 和TableViewer一样,数据的入口也是setInput方法
31         List<Country> input = (List)DataFactory.createTreeData();
32         tv.setInput(input);
33         MyActionGroup2 actionGroup = new MyActionGroup2(tv);// 改用另一个ActionGroup
34         actionGroup.fillContextMenu(new MenuManager());// 将按钮注入到菜单对象中
35         // -----------END------------------
36         shell.open();
37         while (!shell.isDisposed()) {
38             if (!display.readAndDispatch())
39                 display.sleep();
40         }
41         display.dispose();
42     }
43 }

MyActionGroup2.java

 1 public class MyActionGroup2 extends ActionGroup {
 2     private ContainerCheckedTreeViewer tv;
 3
 4     public MyActionGroup2(ContainerCheckedTreeViewer tv) {
 5         this.tv = tv;
 6     }
 7
 8     public void fillContextMenu(IMenuManager mgr) {
 9         MenuManager menuManager = (MenuManager) mgr;
10         menuManager.add(new SelectAllAction());
11         menuManager.add(new RemoveEntryAction());
12         Tree tree = tv.getTree();
13         Menu menu = menuManager.createContextMenu(tree);
14         tree.setMenu(menu);
15     }
16
17     private class SelectAllAction extends Action {
18         public SelectAllAction() {
19             setText("勾选当前结点的所有子结点");
20         }
21
22         public void run() {
23             IStructuredSelection selection = (IStructuredSelection) tv.getSelection();
24             ITreeEntry entry = (ITreeEntry) (selection.getFirstElement());
25             tv.setSubtreeChecked(entry, true); // false不勾选
26         }
27     }
28
29     // 删除结点的Action类
30     private class RemoveEntryAction extends Action {
31         public RemoveEntryAction() {
32             setText("删除");
33         }
34
35         public void run() {
36             Object[] checks = tv.getCheckedElements();// 取得被勾选的结点(包括灰选)
37             if (checks.length == 0) {
38                 MessageDialog.openInformation(null, "提示", "请先勾选记录");
39                 return;
40             }
41             List<ITreeEntry> inputList = (List<ITreeEntry>) tv.getInput();
42             for (Object object : checks) {
43                 if (tv.getGrayed(object))
44                     continue;// 灰选结点不删除
45                 ITreeEntry entry = (ITreeEntry) object;
46                 remove(inputList, entry);
47                 tv.remove(entry);
48             }
49         }
50
51         private void remove(List<ITreeEntry> list, ITreeEntry entry) {
52             if (list == null)
53                 return;
54             for (Iterator it = list.iterator(); it.hasNext();) {
55                 ITreeEntry o = (ITreeEntry) it.next();
56                 if (o.getName().equals(entry.getName())) {
57                     it.remove();
58                     return;
59                 } else {
60                     remove(o.getChildren(), entry);
61                 }
62             }
63         }
64     }
65 }

时间: 2024-10-19 04:50:04

关于JFace带复选框的树的相关文章

关于textjs的tree带复选框的树

通过查阅一些资料和自己之前了解到的一些相关知识,有时项目中需要用到.话不多说,先看一下效果图: 我写的这人员选择的树,主要是改写了TreePanel,如下代码: ExtendTreePanel.js (该文件中可以写一些触发事件) Ext.namespace('Ext.ysq');//Ext.namespace方法定义一个管理类的包,类似Java中定义的包名,目的是建立自己的一个对象名,方便管理,防止重复 Ext.ysq.ExtendTreePanel = Ext.extend(Ext.tree

Java中带复选框的微信牛牛房卡开发的实现和应用

在使用Java Swing开发微信牛牛房卡开发(h5.fanshubbs.com)程序时,很有可能会遇到使用带复选框的微信牛牛房卡开发的需求,但是Java Swing并没有提供这个组件,因此如果你有这个需求,你就得自己动身实现带复选框的树.CheckBoxTree与JTree在两个层面上存在差异:[li]在模型层上,CheckBoxTree的每个结点需要一个成员来保存其是否被选中,但是JTree的结点则不需要.[/li][li]在视图层上,CheckBoxTree的每个结点比JTree的结点多显

带复选框的下拉框

效果图: . css: <style type="text/css"> /* 带复选框的下拉框 */ ul li{ list-style: none; padding:0px; margin: 0px; } .select_checkBox{ border:0px solid red; position: relative; display:inline-block; } .chartQuota{ height:23px; float:left; display:inlin

swing jtree 添加了复选框的树,利用了递归获取选中的果实

原文:swing jtree 添加了复选框的树,利用了递归获取选中的果实 源代码下载地址:http://www.zuidaima.com/share/1553270755478528.htm 矿泉水2013-11-05 16:11:37 swing jtree 添加了复选框的树,利用了递归获取选中的果实

WPF:带复选框CheckBox的树TreeView

最近要用WPF写一个树,同事给了我一个Demo(不知道是从哪里找来的),我基本上就是参照了这个Demo. 先放一下效果图(3棵树): 这个树索要满足的条件是: 父节点.Checked=true时,子节点全部选中(反之成立): 父节点.Checked=false时,子节点全部不选中(反之成立): 子节点存在部分节点选中,部分节点未选中时,父节点为非全选状态(null)(反之成立): 那么这个树究竟要怎么造出来呢? 由于用WPF,且用MVVM模式,故TreeView的ItemSource及复选框的选

C# 读带复选框的excel,写excel并设置字体、边框、背景色

引用:http://www.cnblogs.com/tuyile006/p/3977177.html 这是一篇excel读写功能大汇总,通过C#调用Microsoft.Office.Interop.Excel.dll才能完成任何复杂格式excel的读写操作. 本文需要读取的excel格式如下: 可见表格极不规则,且含有复选框等控件,现在需要将这种表格中的数据提取出来. 要求将提取出来的数据写入到明细表结构的excel中,格式如: 这是我们常见的table表样式,但需要操作excel的字体.背景颜

制作带复选框的ListView控件

实现效果: 知识运用   ListView控件的GridLines //设置是否在ListView控件中显示网格线 public bool GridLines{get;set} 和CheckBoxes属性 //设置listView控件中各数据项是否显示复选框 public bool CheckBoxes{get;set} 以及ListViewItem数据项的Checked属性 //判断是否选中此数据项中的复选框 public bool Checked{get;set} 实现代码: private

JS实现带复选框的下拉菜单

这段时间在做后台的时候需要一个可以复选的下拉菜单,用到的是easyUI中的combo的Demo,先看看官方easyUI:http://www.jeasyui.com/documentation/index.php# ----------------------------------------------------------------------------------------------------------------------------------------------

vue.js带复选框表单的增删改差

近段时间由于公司项目要求,前端开始使用VUE框架进行开发,最近刚开始学习,做了一个表单的增删改查,和大家分享一下. 页面模型代码设计如下 <template> <div id="navi_108_page"> <i-button type="info" @click="adds">添加类型</i-button> <i-button type="warning" @click