Instances of this class provide a selectable user interface object that displays a hierarchy of items and issues notification when an item in the hierarchy is selected.
packagedev.equo;importdev.equo.swt.Config;importorg.eclipse.jface.viewers.*;importorg.eclipse.jface.window.ApplicationWindow;importorg.eclipse.swt.SWT;importorg.eclipse.swt.widgets.*;importjava.util.ArrayList;importjava.util.List;publicclassTreeWithJFaceTreeViewerExampleextendsApplicationWindow{publicTreeWithJFaceTreeViewerExample(){super(null);}@OverrideprotectedControlcreateContents(Compositeparent){TreeViewertreeViewer=newTreeViewer(parent,SWT.MULTI|SWT.H_SCROLL|SWT.V_SCROLL);treeViewer.setContentProvider(newViewContentProvider());treeViewer.setLabelProvider(newViewLabelProvider());treeViewer.setInput(createModel());treeViewer.addSelectionChangedListener(newISelectionChangedListener(){publicvoidselectionChanged(SelectionChangedEventevent){IStructuredSelectionselection=(IStructuredSelection)event.getSelection();ObjectselectedNode=selection.getFirstElement();if(selectedNodeinstanceofTreeNode){TreeNodenode=(TreeNode)selectedNode;if(!node.hasChildren()){// It's a leafSystem.out.println("Leaf node clicked: "+node.getName());}}}});returntreeViewer.getControl();}privateList<TreeNode>createModel(){List<TreeNode>roots=newArrayList<>();// Three-level treeTreeNoderoot1=newTreeNode("Root 1 (3 Levels)");TreeNodechild1_1=newTreeNode("Child 1.1");TreeNodeleaf1_1_1=newTreeNode("Leaf 1.1.1");TreeNodeleaf1_1_2=newTreeNode("Leaf 1.1.2");TreeNodeleaf1_1_3=newTreeNode("Leaf 1.1.3");TreeNodeleaf1_1_4=newTreeNode("Leaf 1.1.4");child1_1.addChild(leaf1_1_1);child1_1.addChild(leaf1_1_2);child1_1.addChild(leaf1_1_3);child1_1.addChild(leaf1_1_4);root1.addChild(child1_1);roots.add(root1);// Four-level treeTreeNoderoot2=newTreeNode("Root 2 (4 Levels)");TreeNodechild2_1=newTreeNode("Child 2.1");TreeNodechild2_1_1=newTreeNode("Child 2.1.1");TreeNodeleaf2_1_1_1=newTreeNode("Leaf 2.1.1.1");child2_1_1.addChild(leaf2_1_1_1);child2_1.addChild(child2_1_1);root2.addChild(child2_1);roots.add(root2);// Another three-level tree for varietyTreeNoderoot3=newTreeNode("Root 3 (3 Levels)");TreeNodechild3_1=newTreeNode("Child 3.1");TreeNodeleaf3_1_1=newTreeNode("Leaf 3.1.1");child3_1.addChild(leaf3_1_1);root3.addChild(child3_1);roots.add(root3);returnroots;}publicstaticvoidmain(String[]args){Config.useEquo(Tree.class);Config.useEquo(TreeItem.class);Config.useEquo(TreeColumn.class);TreeWithJFaceTreeViewerExamplewindow=newTreeWithJFaceTreeViewerExample();window.setBlockOnOpen(true);window.open();Display.getCurrent().dispose();}@OverrideprotectedvoidconfigureShell(Shellshell){super.configureShell(shell);shell.setText("Tree with JFace TreeViewer Example");shell.setSize(400,300);}publicstaticclassViewLabelProviderextendsLabelProvider{@OverridepublicStringgetText(Objectelement){if(elementinstanceofTreeNode){return((TreeNode)element).getName();}returnsuper.getText(element);}}publicstaticclassViewContentProviderimplementsITreeContentProvider{@OverridepublicObject[]getElements(ObjectinputElement){if(inputElementinstanceofList){return((List<?>)inputElement).toArray();}returnnewObject[0];}@OverridepublicObject[]getChildren(ObjectparentElement){if(parentElementinstanceofTreeNode){return((TreeNode)parentElement).getChildren().toArray();}returnnewObject[0];}@OverridepublicObjectgetParent(Objectelement){if(elementinstanceofTreeNode){return((TreeNode)element).getParent();}returnnull;}@OverridepublicbooleanhasChildren(Objectelement){if(elementinstanceofTreeNode){return((TreeNode)element).hasChildren();}returnfalse;}@OverridepublicvoidinputChanged(Viewerviewer,ObjectoldInput,ObjectnewInput){// Not used in this example}@Overridepublicvoiddispose(){// Not used in this example}}publicstaticclassTreeNode{privateStringname;privateList<TreeNode>children=newArrayList<>();privateTreeNodeparent;publicTreeNode(Stringname){this.name=name;}publicStringgetName(){returnname;}publicvoidaddChild(TreeNodechild){children.add(child);child.setParent(this);}publicList<TreeNode>getChildren(){returnchildren;}publicTreeNodegetParent(){returnparent;}publicvoidsetParent(TreeNodeparent){this.parent=parent;}publicbooleanhasChildren(){return!children.isEmpty();}@OverridepublicStringtoString(){returngetName();}}}