文档章节

rcp checkboxTreeViewer 级联勾选

zhenghuazhi
 zhenghuazhi
发布于 2017/02/15 11:16
字数 206
阅读 13
收藏 0

 viewer.addCheckStateListener(new ICheckStateListener(){
        @Override
        public void checkStateChanged(CheckStateChangedEvent event) {
            //级联勾选
            handleCheckStateChange(event);
        }
           
       });

/**
     * @param event
     */
    protected void handleCheckStateChange(final CheckStateChangedEvent event) {

        BusyIndicator.showWhile(getShell().getDisplay(), new Runnable() {
            public void run() {
                Object element = event.getElement();
                boolean state = event.getChecked();
                viewer.setGrayed(element, false);
                if (isExpandable(element))
                    setSubtreeChecked(element, state, state);
//                    viewer.setSubtreeChecked(element, state);
                // only check subtree if state is set to true

                updateParentState(element, state);
                // validateInput();
            }
        });
    }
    /**更新父节点状态
     * @param element
     * @param state
     */
    protected void updateParentState(Object child, boolean baseChildState) {
        if (child == null)
            return;
        Object parent = provider.getParent(child);
        if (parent == null)
            return;

        boolean allSameState = true;
        Object[] children = null;
        children = provider.getChildren(parent);

        for (int i = children.length - 1; i >= 0; i--) {
            if (viewer.getChecked(children[i]) != baseChildState || viewer.getGrayed(children[i])) {
                allSameState = false;
                break;
            }
        }
        viewer.setGrayed(parent, !allSameState);
        viewer.setChecked(parent, !allSameState || baseChildState);
        updateParentState(parent, baseChildState);
        
    }

    /**子目录选择
     * @param element
     * @param state
     * @param state2
     */
    private void setSubtreeChecked(Object parent, boolean state, boolean checkExpandedState) {
//        CashHoldAccTreeElement element = (CashHoldAccTreeElement) parent;

        Object[] children = provider.getChildren(parent);
        for (int i = children.length - 1; i >= 0; i--) {
            Object element = children[i];
            if (state) {
                viewer.setChecked(element, true);
                viewer.setGrayed(element, false);
            } else
                viewer.setGrayChecked(element, false);
            if (isExpandable(element))
                setSubtreeChecked(element, state, checkExpandedState);
        }
    }

    /**
     * @param element
     * @return
     */
    boolean isExpandable(Object element) {
        return provider.hasChildren(element);
    }

本文转载自:

zhenghuazhi

zhenghuazhi

粉丝 7
博文 266
码字总数 91131
作品 0
深圳
高级程序员
私信 提问
通过递归算法完成树的级联勾选的一般思路

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在某个项目中,发现当tree上加上checkbox后,初始化该树时会特别慢。现场树上的节...

李晓晖
2016/09/14
0
0
easyui的treegrid的级联勾选子节点,或者级联勾选父节点

级联勾选子节点: 步骤: 1.在treegrid的onCheck事件中写上函数(级联勾选子节点): 2.在onUncheck事件中写上函数(级联取消勾选子节点): 第二种:选择子节点需要将父节点选中 onCheck事件: onUnc...

文文1
2016/07/27
2.8K
26
高仿头条-广告系统中的级联面板组件

需求分析 根据效果图,首先需要把省市区的数据按列展示在左侧区域,点击父级节点联动展示子级数据,每次点击展开节点的下一级所在的列。 勾选父级节点,子级节点全选,反之全选子级节点,父节...

juenanfeng
05/01
0
0
GEF入门实例_总结_02_新建初始RCP空项目

一、前言 本节承接上一节: GEF入门实例总结01_教程、源码、开发环境准备 这一节我们来创建一个空的RCP项目。 二、新建RCP项目 1. New 一个 Plug-in Project 2.输入项目名 输入项目名:gef.t...

rayner
2018/06/07
0
0
zTree的checkbox父子关联操作,无法触发onCheck事件

我有如下树结构: 我将父子级联关系设置为 setting.check.chkboxType = { "Y" : "ps", "N" : "ps" }; 为tree设置了onCheck事件 调用ztree提供的checkNode方法,选中"随意勾选1"时,按照级联配置......

Navee7
2014/11/26
3.4K
1

没有更多内容

加载失败,请刷新页面

加载更多

【1015】LNMP架构二

【1015】LNMP架构二 三、PHP安装 PHP安装和LAMP安装PHP方法有差别,需要开启php-fpm服务 1、下载PHP7至/usr/local/src/ 切换目录:cd /usr/local/src 2、解压缩 tar -jxvf php-7.3.0.tar.gz...

飞翔的竹蜻蜓
21分钟前
2
0
浅谈Visitor访问者模式

一、前言 什么叫访问,如果大家学过数据结构,对于这点就很清晰了,遍历就是访问的一般形式,单独读取一个元素进行相应的处理也叫作访问,读取到想要查看的内容+对其进行处理就叫作访问,那么...

青衣霓裳
40分钟前
6
0
JS内嵌多个页面,页面之间如何更快捷的查找相关联的页面

假设parent为P页面, P页面有两个子页面,分别为B页面和C页面; B页面和C页面分别内嵌一个iframe,分别为:D页面和E页面 现在通过B页面的内嵌页面D的方法refreshEpage(eUrl)来加载内嵌页面E的内容...

文文1
41分钟前
7
0
Hibernate 5 升级后 getProperties 错误

升级到 Hibernate 5 后,提示有错误: org.hibernate.engine.spi.SessionFactoryImplementor.getProperties()Ljava/util/Map; 完整的错误栈为: java.lang.NoSuchMethodError: org.hibernate......

honeymoose
42分钟前
6
0
mysql-connector-java升级到8.0后保存时间到数据库出现了时差

在一个新项目中用到了新版的mysql jdbc 驱动 <dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>8.0.18</version> ......

ValSong
46分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部