rcp checkboxTreeViewer 级联勾选

 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);
    }

转载于:https://my.oschina.net/zhenghuazhi/blog/839061

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值