云淡天高 发表于 2009-2-9 09:47:39

一个非常实用的关于checkboxtree小例子

package tree;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import org.eclipse.jface.viewers.CheckboxTreeViewer;
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Item;
    import org.eclipse.swt.widgets.Shell;
    import org.eclipse.swt.widgets.Tree;
    import org.eclipse.swt.widgets.TreeItem;
    import org.eclipse.swt.widgets.Widget;
    public class TE {
      private Tree tree;
      protected Shell shell;
      /**
         * Launch the application
         * @param args
         */
      public static void main(String[] args) {
            try {
                TE window = new TE();
                window.open();
            } catch (Exception e) {
                e.printStackTrace();
            }
      }
      /**
         * Open the window
         */
      public void open() {
            final 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(500, 375);
            shell.setText("SWT Application");
            final CheckboxTreeViewer checkboxTreeViewer = new CheckboxTreeViewer(shell, SWT.BORDER);
            tree = checkboxTreeViewer.getTree();
            tree.setBounds(23, 48, 459, 260);
            checkboxTreeViewer.setContentProvider(new Content());
            checkboxTreeViewer.setLabelProvider(new Label());
            checkboxTreeViewer.setInput(getInputContent());
    /*      Parent []p = new Parent;
            p = new Parent();
            p.setName("小一");
            List<Child> ls = new ArrayList<Child>();
            Child c1 = new Child();
            c1.setName("小一一");
            ls.add(c1);
            p.setChild(ls);*/
            checkboxTreeViewer.expandAll();
            String []obj = new String;
            obj = "小一";
            obj = "小二二";
            setChecked(obj, tree);
            //
      }
      private void setChecked(String [] obj, Tree tree) {
            Map map = new HashMap();
            for(int i = 0; i < obj.length; i) {
                map.put(obj, obj);
            }
            internalSetChecked(map, tree);
      }
      private Item[] getChildren(Widget o) {
            if (o instanceof TreeItem) {
                return ((TreeItem) o).getItems();
            }
            if (o instanceof Tree) {
                return ((Tree) o).getItems();
            }
            return null;
      }
      private void internalSetChecked(Map checkedElements,
                Widget widget) {
            Item[] items = getChildren(widget);
            for (int i = 0; i < items.length; i) {
                TreeItem item = (TreeItem) items;
                Object data = item.getData();
                if (data != null) {
                  String temp = ((IName)data).getName();
                  boolean checked = checkedElements.containsKey(temp);
                  if (checked != item.getChecked()) {
                        item.setChecked(checked);
                  }
                }
                internalSetChecked(checkedElements, item);
            }
      }
      private List getInputContent() {
            List<Parent> lst = new ArrayList<Parent>();
            Parent p1 = new Parent();
            p1.setName("小一");
            List<Child> ls = new ArrayList<Child>();
            Child c1 = new Child();
            c1.setName("小一一");
            ls.add(c1);
            p1.setChild(ls);
            Parent p2 = new Parent();
            p2.setName("小二");
            List<Child> lss = new ArrayList<Child>();
            Child c2 = new Child();
            c2.setName("小二二");
            lss.add(c2);
            p2.setChild(lss);
            lst.add(p1);
            lst.add(p2);
            return lst;
      }
    }
页: [1]
查看完整版本: 一个非常实用的关于checkboxtree小例子