The DynamicTree.java file creates and maintains a tree structure of the contact list. Listing 7-7 shows the contents of the DynmaicTree.java file:
Listing 7-7: The DynamicTree.java File
/*Imports required GridLayout class*/ import java.awt.GridLayout; /*Imports required Toolkit class*/ import java.awt.Toolkit; /*Imports required JPanel class*/ import javax.swing.JPanel; /*Imports required JScrollPane class*/ import javax.swing.JScrollPane; /*Imports required JTree class*/ import javax.swing.JTree; /*Imports required DefaultMutableTreeNode class*/ import javax.swing.tree.DefaultMutableTreeNode; /* mports required DefaultTreeModel class*/ import javax.swing.tree.DefaultTreeModel; /*Imports required MutableTreeNode class*/ import javax.swing.tree.MutableTreeNode; /*Imports required TreePath class*/ import javax.swing.tree.TreePath; /*Imports required TreeSelectionModel class*/ import javax.swing.tree.TreeSelectionModel; /*Imports required TreeModelEvent class*/ import javax.swing.event.TreeModelEvent; /*Imports required TreeModelListener class*/ import javax.swing.event.TreeModelListener; /* class DynamicTree - This class is used to create a tree. Constructor: DynamicTree-This constructor creates GUI. Methods: clear: This method is called remove all node from tree. getTreeHandler: This method is called to get handler of the object of JTree class. removeCurrentNode: This method is called to remove selected node from tree. addObject: This method is called to add node into the tree. */ public class DynamicTree extends JPanel { /*Declares object of DefaultMutableTreeNode class.*/ DefaultMutableTreeNode rootNode; /*Declares object of DefaultTreeModel class.*/ DefaultTreeModel treeModel; /*Declares object of JTree class.*/ JTree tree; /*Declares and initializes object of Toolkit class.*/ Toolkit toolkit = Toolkit.getDefaultToolkit(); public DynamicTree(DefaultMutableTreeNode node) { super(new GridLayout(1, 0)); /*initializes the object of DefaultMutableTreeNode class.*/ rootNode = new DefaultMutableTreeNode("My Contact List"); /*initializes the object of DefaultTreeModel class.*/ treeModel = new DefaultTreeModel(rootNode); treeModel.addTreeModelListener(new RosterTreeModelListener()); /*initializes the object of JTree class.*/ tree = new JTree(treeModel); tree.setEditable(true); tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); tree.setShowsRootHandles(true); /*Declares and initializes object of JScrollPane class.*/ JScrollPane scrollPane = new JScrollPane(tree); add(scrollPane); } /* clear: This method is called remove all node from tree. Parameter: N/A Return Value: N/A */ public void clear() { rootNode.removeAllChildren(); treeModel.reload(); } /* getTreeHandler: This method is called to get handler of the object of JTree class. Parameter: N/A Return Value: JTree */ public JTree getTreeHandler() { return tree; } /* removeCurrentNode: This method is called to remove selected node from tree. Parameter: N/A Return Value: N/A */ public void removeCurrentNode() { TreePath currentSelection = tree.getSelectionPath(); if (currentSelection != null) { DefaultMutableTreeNode currentNode = (DefaultMutableTreeNode) (currentSelection.getLastPathComponent()); MutableTreeNode parent = (MutableTreeNode)(currentNode.getParent()); if (parent != null) { treeModel.removeNodeFromParent(currentNode); return; } } toolkit.beep(); } /* addObject: This method is called to add node into the tree. Parameter: child - Object of Object class. Return Value: DefaultMutableTreeNode */ public DefaultMutableTreeNode addObject(Object child) { DefaultMutableTreeNode parentNode = null; TreePath parentPath = tree.getSelectionPath(); if (parentPath == null) { parentNode = rootNode; } else { parentNode = (DefaultMutableTreeNode)(parentPath.getLastPathComponent()); } return addObject(parentNode, child, true); } /* addObject: This method is called to add child into the give tree node. Parameter: parent - Object of DefaultMutableTreeNode class, child - Object of Object class. Return Value: DefaultMutableTreeNode */ public DefaultMutableTreeNode addObject(DefaultMutableTreeNode parent,Object child) { return addObject(parent, child, true); } /* addObject: This method is called to add child into the give tree node. Parameter: parent - Object of DefaultMutableTreeNode class, child - Object of Object class, shouldBeVisible Return Value: DefaultMutableTreeNode */ public DefaultMutableTreeNode addObject(DefaultMutableTreeNode parent, Object child, boolean shouldBeVisible) { DefaultMutableTreeNode childNode = new DefaultMutableTreeNode(child); if (parent == null) { parent = rootNode; } treeModel.insertNodeInto(childNode, parent, parent.getChildCount()); if (shouldBeVisible) { tree.scrollPathToVisible(new TreePath(childNode.getPath())); } return childNode; } /* class DynamicTree - This class implements TreeModelListener interface. */ class RosterTreeModelListener implements TreeModelListener { public void treeNodesChanged(TreeModelEvent e) { DefaultMutableTreeNode node; node = (DefaultMutableTreeNode)(e.getTreePath().getLastPathComponent()); try { int index = e.getChildIndices()[0]; node = (DefaultMutableTreeNode)(node.getChildAt(index)); } catch (NullPointerException exc) {} } public void treeNodesInserted(TreeModelEvent e) {} public void treeNodesRemoved(TreeModelEvent e) {} public void treeStructureChanged(TreeModelEvent e) {} } }
Download this listing.
In the above code, the constructor of the DynamicTree class takes an object of the DefaultMutableTreeNode class and creates a tree structure of the contact list for the Contact List application.
The methods defined in Listing 7-7 are:
clear(): Removes all end user names from the tree structure of the contact list.
getTreeHandler(): Returns the object of the JTree class.
removeCurrentNode(): Removes the selected end users from the tree structure of the contact list.
addObject(): Adds other end users to the tree structure of the contact list.