FileDocCategorySizeDatePackage
ExprTree1.javaAPI DocExample2519Mon Nov 09 12:45:50 GMT 1998None

ExprTree1.java

// ExprTree1.java
// An expression tree for holding algebraic expressions, built up using
// ExpressionTreeModel for use with a JTree object.
//
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.event.*;

public class ExprTree1 extends JFrame implements TreeExpansionListener {
    
  JTree tree;
  ExpressionTreeModel treeModel;
  OpNode[] operators = new OpNode[4];
  Integer[] operands = new Integer[5];

  public ExprTree1() {
    super("Demo Expression Tree");
    setSize(400, 300);
    addWindowListener(new BasicWindowMonitor());
  }
    
  public void init() {
    // create the nodes and the leaves
    operators[0] = new OpNode("+");
    operators[1] = new OpNode("*");
    operators[2] = new OpNode("-");
    operators[3] = new OpNode("/");
    operands[0] = new Integer(1);
    operands[1] = new Integer(2);
    operands[2] = new Integer(3);
    operands[3] = new Integer(4);
    operands[4] = new Integer(5);

    // start our tree with a root of "+"
    treeModel = new ExpressionTreeModel(operators[0]);

    // build the tree from the root down
    treeModel.insertNode(operators[0], operands[0], 0);
    treeModel.insertNode(operators[0], operators[1], 1);
    treeModel.insertNode(operators[1], operators[2], 0);
    treeModel.insertNode(operators[1], operators[3], 1);
    treeModel.insertNode(operators[2], operands[1], 0);
    treeModel.insertNode(operators[2], operands[2], 1);
    treeModel.insertNode(operators[3], operands[3], 0);
    treeModel.insertNode(operators[3], operands[4], 1);

    tree = new JTree(treeModel);
    tree.setShowsRootHandles(true);
    tree.collapseRow(0);

    // Listen to our own expand/collapse events to keep the labels in sync
    tree.addTreeExpansionListener(this);
    getContentPane().add(tree, BorderLayout.CENTER);
  }

  // Make sure that we get the correct label after we have expanded the node
  public void treeExpanded(TreeExpansionEvent tee) {
    OpNode node = (OpNode)tee.getPath().getLastPathComponent();
    node.setExpanded(true);
    treeModel.refresh(tee);
  }

  // Likewise, make sure that we get the correct label after we have collapsed
  // the node
  public void treeCollapsed(TreeExpansionEvent tee) {
    OpNode node = (OpNode)tee.getPath().getLastPathComponent();
    node.setExpanded(false);
    treeModel.refresh(tee);
  }

  public static void main(String args[]) {
    ExprTree1 et = new ExprTree1();
    et.init();
    et.setVisible(true); 
  }
}