swt多选树的实现

 

package cn.com.test;

import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;

public class MainApp {

    protected Shell shell;

    /**
     * Launch the application.
     * @param args
     */
    public static void main(String[] args) {
        try {
            MainApp window = new MainApp();
            window.open();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * Open the window.
     */
    public void open() {
        Display display = Display.getDefault();
        createContents();
        shell.open();
        shell.layout();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
    }

    /**
     * Create contents of the window.
     */
    protected void createContents() {
        shell = new Shell();
        shell.setSize(450, 300);
        shell.setText("SWT Application");
        {
            Composite composite = new Composite(shell, SWT.NONE);
            composite.setBounds(0, 0, 434, 262);
            {
                final Tree tree = new Tree(composite, SWT.BORDER | SWT.CHECK | SWT.FULL_SELECTION | SWT.VIRTUAL | SWT.MULTI);
                tree.setBounds(0, 0, 189, 252);
                final TreeItem treeItem = new TreeItem(tree, SWT.NONE);
                //treeItem.setChecked(true);
                treeItem.setText("\u5168\u90E8");
                final TreeItem treeItem_2 = new TreeItem(tree, SWT.NONE);
                treeItem_2.setChecked(false);
                treeItem_2.setText("\u5168\u90E82");
                final TreeItem treeItem1 = new TreeItem(treeItem, SWT.NONE);               
                treeItem1.setText("New TreeItem1");
                treeItem1.setData("value", "你是我的玫瑰花");
                final TreeItem treeItem2 = new TreeItem(treeItem, SWT.NONE);           
                treeItem2.setText("New TreeItem2");
                final TreeItem treeItem3 = new TreeItem(treeItem, SWT.NONE);
                treeItem3.setText("New TreeItem3");
                final TreeItem treeItem4 = new TreeItem(treeItem, SWT.NONE);
                treeItem4.setText("New TreeItem4");
                treeItem.setExpanded(true);
                final TreeItem treeItem2_1 = new TreeItem(treeItem_2, SWT.NONE);               
                treeItem2_1.setText("New TreeItem2-1");
                final TreeItem treeItem2_2 = new TreeItem(treeItem_2, SWT.NONE);           
                treeItem2_2.setText("New TreeItem2-2");
                final TreeItem treeItem2_3 = new TreeItem(treeItem_2, SWT.NONE);
                treeItem2_3.setText("New TreeItem2-3");
                final TreeItem treeItem2_4 = new TreeItem(treeItem_2, SWT.NONE);
                treeItem2_4.setText("New TreeItem2-4");
                treeItem_2.setExpanded(true);
                final TreeItem treeItem1_2_1 = new TreeItem(treeItem2, SWT.NONE);               
                treeItem1_2_1.setText("New TreeItem2-1");
                final TreeItem treeItem1_2_2 = new TreeItem(treeItem2, SWT.NONE);           
                treeItem1_2_2.setText("New TreeItem2-2");
                final TreeItem treeItem1_2_3 = new TreeItem(treeItem2, SWT.NONE);
                treeItem1_2_3.setText("New TreeItem2-3");
                final TreeItem treeItem1_2_4 = new TreeItem(treeItem2, SWT.NONE);
                treeItem1_2_4.setText("New TreeItem2-4");
                treeItem2.setExpanded(true);
                tree.addSelectionListener(new SelectionAdapter() {
                    //迭代选择上级目录的多选框
                    private void selectAllSubItems(TreeItem selectedTreeItem){
                        TreeItem[] selection = selectedTreeItem.getItems();
                        for (int i = 0; i < selection.length; i++) {                               
                            selection[i].setChecked(selectedTreeItem.getChecked());
                            selectAllSubItems(selection[i]);
                        }
                    }
                    private void selectAllParentItems(TreeItem selectedTreeItem){
                        TreeItem parentTreeItem = selectedTreeItem.getParentItem();
                        //当有一个未被选中的时候,取消父节点的选择,当全部选中,则父节点选中
                        if(parentTreeItem != null){
                            TreeItem[] parentSubItems = parentTreeItem.getItems();
                            boolean allChecked = true;
                            for (int i = 0; i < parentSubItems.length; i++) {
                                allChecked = parentSubItems[i].getChecked();
                                if(!allChecked){
                                    break;
                                }
                            }
                            parentTreeItem.setChecked(allChecked);       
                            selectAllParentItems(parentTreeItem);
                        }
                    }
                    @Override
                    public void widgetSelected(SelectionEvent e) {
                        if(e.detail == SWT.CHECK){
                            TreeItem selectedTreeItem = (TreeItem)e.item;
                            String value = (String)selectedTreeItem.getData("value");
                            System.out.println(value);
                            //如果有父节点,选择父节点
                            selectAllParentItems(selectedTreeItem);
                            //如果有子节点,全选子节点
                            selectAllSubItems(selectedTreeItem);
                        }else{
                            System.out.println("其他事件");
                        }
                    }
                });
            }
        }

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值