==> Employee.java <== import java.util.*; public class Employee { String name; float salary; Vector subordinates; boolean isLeaf; Employee parent = null; //-------------------------------------- public Employee(String _name, float _salary) { name = _name; salary = _salary; subordinates = new Vector(); isLeaf = false; } //-------------------------------------- public Employee(Employee _parent, String _name, float _salary) { name = _name; salary = _salary; parent = _parent; subordinates = new Vector(); isLeaf = false; } //-------------------------------------- public void setLeaf(boolean b) { isLeaf = b; //if true, do not allow children } //-------------------------------------- public float getSalary() { return salary; } //-------------------------------------- public String getName() { return name; } //-------------------------------------- public boolean add(Employee e) { if (! isLeaf) subordinates.addElement(e); return isLeaf; //false if unsuccessful } //-------------------------------------- public void remove(Employee e) { if (! isLeaf) subordinates.removeElement(e); } //-------------------------------------- public Enumeration elements() { return subordinates.elements(); } //-------------------------------------- public Employee getChild(String s) { Employee newEmp = null; if(getName().equals(s)) return this; else { boolean found = false; Enumeration e = elements(); while(e.hasMoreElements() && (! found)) { newEmp = (Employee)e.nextElement(); found = newEmp.getName().equals(s); if (! found) { newEmp = newEmp.getChild(s); found =(newEmp != null); } } if (found) return newEmp; else return null; } } //-------------------------------------- public float getSalaries() { float sum = salary; for(int i = 0; i < subordinates.size(); i++) { sum += ((Employee)subordinates.elementAt(i)).getSalaries(); } return sum; } } ==> JxFrame.java <== import java.awt.*; import java.awt.event.*; import java.util.*; //swing classes import com.sun.java.swing.text.*; import com.sun.java.swing.*; import com.sun.java.swing.event.*; public class JxFrame extends JFrame { public JxFrame(String title) { super(title); setCloseClick(); setLF(); } private void setCloseClick() { //create window listener to respond to window close click addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {System.exit(0);} }); } //------------------------------------------ private void setLF() { // Force SwingApp to come up in the System L&F String laf = UIManager.getSystemLookAndFeelClassName(); try { UIManager.setLookAndFeel(laf); } catch (UnsupportedLookAndFeelException exc) {System.err.println("Warning: UnsupportedLookAndFeel: " + laf);} catch (Exception exc) {System.err.println("Error loading " + laf + ": " + exc); } } } ==> RectButton.java <== import java.awt.*; import java.awt.event.*; import java.util.*; //swing classes import com.sun.java.swing.text.*; import com.sun.java.swing.*; import com.sun.java.swing.event.*; import com.sun.java.swing.border.*; import com.sun.java.swing.tree.*; public class RectButton extends JButton implements Command { Mediator med; public RectButton(ActionListener act, Mediator md) { super("R"); setBorder(new EmptyBorder(0,0,0,0)); addActionListener(act); med = md; } public void Execute() { } } ==> empTree.java <== import java.awt.*; import java.awt.event.*; import java.util.*; //swing classes import com.sun.java.swing.text.*; import com.sun.java.swing.*; import com.sun.java.swing.event.*; import com.sun.java.swing.border.*; import com.sun.java.swing.tree.*; public class empTree extends JxFrame implements TreeSelectionListener { Employee boss, marketVP, prodVP; Employee salesMgr, advMgr; Employee prodMgr, shipMgr; JScrollPane sp; JPanel treePanel; JTree tree; DefaultMutableTreeNode troot; JLabel cost; public empTree() { super("Employee tree"); makeEmployees(); setGUI(); } //-------------------------------------- private void setGUI() { treePanel = new JPanel(); getContentPane().add(treePanel); treePanel.setLayout(new BorderLayout()); sp = new JScrollPane(); treePanel.add("Center", sp); treePanel.add("South", cost = new JLabel(" ")); treePanel.setBorder(new BevelBorder(BevelBorder.RAISED)); troot = new DefaultMutableTreeNode(boss.getName()); tree= new JTree(troot); tree.setBackground(Color.lightGray); loadTree(boss); /* Put the Tree in a scroller. */ sp.getViewport().add(tree); setSize(new Dimension(200, 300)); setVisible(true); } //------------------------------------ public void loadTree(Employee topDog) { DefaultMutableTreeNode troot; troot = new DefaultMutableTreeNode(topDog.getName()); treePanel.remove(tree); tree= new JTree(troot); tree.addTreeSelectionListener(this); sp.getViewport().add(tree); addNodes(troot, topDog); tree.expandRow(0); repaint(); } //-------------------------------------- private void addNodes(DefaultMutableTreeNode pnode, Employee emp) { DefaultMutableTreeNode node; Enumeration e = emp.elements(); while(e.hasMoreElements()) { Employee newEmp = (Employee)e.nextElement(); node = new DefaultMutableTreeNode(newEmp.getName()); pnode.add(node); addNodes(node, newEmp); } } //-------------------------------------- private void makeEmployees() { boss = new Employee("CEO", 200000); boss.add(marketVP = new Employee("Marketing VP", 100000)); boss.add(prodVP = new Employee("Production VP", 100000)); marketVP.add(salesMgr = new Employee("Sales Mgr", 50000)); marketVP.add(advMgr = new Employee("Advt Mgr", 50000)); for (int i=0; i<5; i++) salesMgr .add(new Employee("Sales "+new Integer(i).toString(), 30000.0F +(float)(Math.random()-0.5)*10000)); advMgr.add(new Employee("Secy", 20000)); prodVP.add(prodMgr = new Employee("Prod Mgr", 40000)); prodVP.add(shipMgr = new Employee("Ship Mgr", 35000)); for (int i = 0; i < 4; i++) prodMgr.add( new Employee("Manuf "+new Integer(i).toString(), 25000.0F +(float)(Math.random()-0.5)*5000)); for (int i = 0; i < 3; i++) shipMgr.add( new Employee("ShipClrk "+new Integer(i).toString(), 20000.0F +(float)(Math.random()-0.5)*5000)); } //-------------------------------------- public void valueChanged(TreeSelectionEvent evt) { TreePath path = evt.getPath(); String selectedTerm = path.getLastPathComponent().toString(); Employee emp = boss.getChild(selectedTerm); if(emp != null) cost.setText(new Float(emp.getSalaries()).toString()); } //-------------------------------------- static public void main(String argv[]) { new empTree(); } }