树的复选框用CheckboxTreeViewer实现.由于其子类ContainerCheckedTreeViewer在没有选择全部子节点时可以自动将父节点设置成灰选,所以实现树的复选框更多的是用ContainerCheckedTreeViewer.
关于这个ContainerCheckedTreeViewer类我没有在SWT/JFace的API文档中找到,但是在Eclipse中查看源码能找到.
CheckboxTreeViewer的继承类关系图:
TreeView4.java
public class TreeViewer4 {
public static void main(String[] args) {
new TreeViewer4().open();
} public void open() {
final Display display = new Display();
final Shell shell = new Shell();
shell.setSize(300, 300);
// -----------界面核心代码-------------------
shell.setLayout(new FillLayout());
// 用ContainerCheckedTreeViewer完全替换TreeViewer
ContainerCheckedTreeViewer tv = new ContainerCheckedTreeViewer(shell, SWT.BORDER);
tv.setUseHashlookup(true); // 加快查找速度 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());//设置"标签器"
// 和TableViewer一样,数据的入口也是setInput方法
List<Country> input = (List)DataFactory.createTreeData();
32 tv.setInput(input);
MyActionGroup2 actionGroup = new MyActionGroup2(tv);// 改用另一个ActionGroup
actionGroup.fillContextMenu(new MenuManager());// 将按钮注入到菜单对象中
// -----------END------------------
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
MyActionGroup2.java
public class MyActionGroup2 extends ActionGroup {
private ContainerCheckedTreeViewer tv; public MyActionGroup2(ContainerCheckedTreeViewer tv) {
this.tv = tv;
}
//这个地方直译方法名就是"填充上下文菜单fillContextMenu()传入的是一个菜单管理器的类(接口)"
public void fillContextMenu(IMenuManager mgr) {
MenuManager menuManager = (MenuManager) mgr;
menuManager.add(new SelectAllAction());//通过菜单管理器增加一个"全选"的Action()
menuManager.add(new RemoveEntryAction());//通过菜单管理器增加一个"删除"的Action()
Tree tree = tv.getTree();//getTree()是TreeViewer类下的一个方法. 就是返回这个视图的树形结构.
Menu menu = menuManager.createContextMenu(tree);
tree.setMenu(menu);
} private class SelectAllAction extends Action {//首先继承Action接口
public SelectAllAction() {//首先就是重写这个Action对应的构造方法
setText("勾选当前结点的所有子结点");
} public void run() {//每个Action中都有对应的run()方法.
IStructuredSelection selection = (IStructuredSelection) tv.getSelection();
ITreeEntry entry = (ITreeEntry) (selection.getFirstElement());
tv.setSubtreeChecked(entry, true); // false不勾选
}
} // 删除结点的Action类
private class RemoveEntryAction extends Action {
public RemoveEntryAction() {
setText("删除");
} public void run() {
Object[] checks = tv.getCheckedElements();// 取得被勾选的结点(包括灰选)
if (checks.length == 0) {
MessageDialog.openInformation(null, "提示", "请先勾选记录");
return;
}
List<ITreeEntry> inputList = (List<ITreeEntry>) tv.getInput();
for (Object object : checks) {
if (tv.getGrayed(object))
continue;// 灰选结点不删除
ITreeEntry entry = (ITreeEntry) object;
remove(inputList, entry);
tv.remove(entry);
}
} private void remove(List<ITreeEntry> list, ITreeEntry entry) {
if (list == null)
return;
for (Iterator it = list.iterator(); it.hasNext();) {
ITreeEntry o = (ITreeEntry) it.next();
if (o.getName().equals(entry.getName())) {
it.remove();
return;
} else {
remove(o.getChildren(), entry);
}
}
}
}
}
关于JFace带复选框的树的更多相关文章
-
关于textjs的tree带复选框的树
通过查阅一些资料和自己之前了解到的一些相关知识,有时项目中需要用到.话不多说,先看一下效果图: 我写的这人员选择的树,主要是改写了TreePanel,如下代码: ExtendTreePanel.js ...
-
雷林鹏分享:jQuery EasyUI 树形菜单 - 创建带复选框的树形菜单
jQuery EasyUI 树形菜单 - 创建带复选框的树形菜单 easyui 的树(Tree)插件允许您创建一个复选框树.如果您点击一个节点的复选框,这个点击的节点信息将向上和向下继承.例如:点击 ...
-
jquery完成带复选框的表格行高亮显示
jquery完成带复选框的表格行高亮显示 通过jquery技术来操作表格是件简单的事,通过jquery的语法,可以很轻松的完成表格的隔行换色,悬浮高亮,在实际的应用中可能会出现表格中带复选框的,删除时 ...
-
WPF:带复选框CheckBox的树TreeView
最近要用WPF写一个树,同事给了我一个Demo(不知道是从哪里找来的),我基本上就是参照了这个Demo. 先放一下效果图(3棵树): 这个树索要满足的条件是: 父节点.Checked=true时,子节 ...
-
easyUI带复选框的组合树
代码: <input id="depts"><script type="text/javascript">$(document).rea ...
-
C# 读带复选框的excel,写excel并设置字体、边框、背景色
这是一篇excel读写功能大汇总,通过C#调用Microsoft.Office.Interop.Excel.dll才能完成任何复杂格式excel的读写操作. 本文需要读取的excel格式如下: 可见表 ...
-
实现带复选框的TreeView控件
实现效果: 知识运用: TreeView控件的CheckView属性 //是否在树形视图控件中显示复选框 public bool CheckBoxs{ get;ser } 实现代码: TreeView ...
-
制作带复选框的ListView控件
实现效果: 知识运用 ListView控件的GridLines //设置是否在ListView控件中显示网格线 public bool GridLines{get;set} 和CheckBoxes ...
-
WindowsForm ComboBoxList 下拉框带复选框 可以动态添加
先来张效果图: 1.这里需要对控件进行重写,详细内容如下,对此不感兴趣的可以直接跳过这步,下载本人生成的dll,直接看第二小结,下载链接https://pan.baidu.com/s/1gfzrK5t ...
随机推荐
-
js严格模式总结(转~)原文地址http://www.cnblogs.com/chayan/p/5793964.html
首页,我们要理解严格模式的概念,严格模式是一种特殊的执行模式,它修复了部分语言上的不足,提供更强的错误检查,病增强安全性.可以对部分函数进行执行严格模式,如: function func(){ 'us ...
-
java中equals和";==";的区别
"=="号,它比较的是一个对象在内存中的地址值, 比如2个字符串对象String s1 = new String("str");String s2 = new ...
-
Winform自定义窗体样式,实现标题栏可灵活自定义
最近在编写C/S结构应用程序时,感觉窗体的标题栏样式太死板了,标题文字不能更改大小.颜色.字体等,按钮不能隐藏等问题,在网上也查找了许多相关的资料,没有找到合适的解决方案,发现许多人也在寻求这个问题, ...
-
poj 3270 Cow Sorting
思路:仔细读题,看到FARMER是两两交换牛的顺序进行排序的话,应该就往置换上靠拢,而这个题果然是置换的应用(有的解题报告上说是置换群,其实这只是单个置换,不用让它构成群).我们来将这些无序的牛抽象成 ...
-
sharepoint 脚本 强迫以管理员权限运行
#region 关键代码:强迫以管理员权限运行 $currentWi = [Security.Principal.WindowsIdentity]::GetCurrent() $currentWp = ...
-
图解:Activity生命周期
当用户需要对手机通过屏幕进行交互时,比如打一个电话,拍张照片,发送一个邮件,或者查看地图.开发者就需要实现一个活动(Activity).每个活动都将作为一个提供用户使用接口的窗口.它可以填满整个屏幕, ...
-
(转)ReentrantLock实现原理及源码分析
背景:ReetrantLock底层是基于AQS实现的(CAS+CHL),有公平和非公平两种区别. 这种底层机制,很有必要通过跟踪源码来进行分析. 参考 ReentrantLock实现原理及源码分析 源 ...
-
layui 的学习
1. meta标签 https://www.cnblogs.com/wangyang108/p/5995379.html <meta name="viewport" cont ...
-
C++ 赋值构造函数的返回值到底有什么用?且返回值是否为引用类型有什么区别吗?
首先定义类Person class Person{ public: string name; Person()=default; //默认构造函数 Person(string nam):name(na ...
-
使用js如何设置、获取盒模型的宽和高
第一种: dom.style.width/height 这种方法只能获取使用内联样式的元素的宽和高. 第二种: dom.currentStyle.width/height 这种方法获取的是浏览器渲染以 ...