/* * This code is based on an example provided by Richard Stanford, * a tutorial reader. */ // Java core packages import java.awt.event.*; // Java extension packages import javax.swing.*; import java.util.*; import java.awt.*; import javax.swing.*; import javax.swing.tree.*; import javax.swing.event.*; public class RuleTree extends JPanel { protected DefaultMutableTreeNode rootNode; protected DefaultTreeModel treeModel; protected JTree tree; public JScrollPane scrollPane; private Toolkit toolkit = Toolkit.getDefaultToolkit(); String st="nullString"; public String cnode=new String(st); public RuleTable2 rt2; //cnode="nullString"; public RuleTree(final XShellKBuilder xsb) { //rt2=rt; //String stg="nullString"; //System.out.println(cnode); xsb.xnode="nullString"; rootNode = new DefaultMutableTreeNode("Rules"); treeModel = new DefaultTreeModel(rootNode); treeModel.addTreeModelListener(new RuleTreeModelListener()); //cnode="nullString"; tree = new JTree(treeModel); tree.setEditable(true); tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); tree.setShowsRootHandles(true); scrollPane = new JScrollPane(tree); setLayout(new GridLayout(1,0)); add(scrollPane); tree.getSelectionModel().setSelectionMode (TreeSelectionModel.SINGLE_TREE_SELECTION); //Listen for when the selection changes. tree.addTreeSelectionListener(new TreeSelectionListener() { public void valueChanged(TreeSelectionEvent e) { //System.out.println("path"+tree.getSelectionPath()); DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent(); if (node==null||node.equals("Rules")){return;} else{ cnode=""+node; if(cnode.equals("Rules")){return;} xsb.xnode=cnode; //stg=cnode; //System.out.println("cnode:"+cnode); xsb.ruleTable=new RuleTable2(cnode); /*RuleBodyGet2 rbgg=new RuleBodyGet2(cnode); String [][] rbg=new String [rbgg.noRows][]; int sze=rbgg.noRows; rbg=rbgg.bodies; int i=0; //xsb.updateRules(cnode); String [] cnames={"NOT", "Condition Type", "Condition"}; xsb.ruleTable=new RuleTable2(cnode);*/ xsb.createRulePane(); //xsb=new XShellKBuilder(); xsb.ruleTable.table.setPreferredScrollableViewportSize(new Dimension(50,70)); xsb.ruleTable.table.setRowHeight(32); } Object nodeInfo = node.getUserObject(); if (node.isLeaf()) { //System.out.println("isLeaf"); } else { //System.out.println("isnotLeaf"); } } });} public RuleTree() { System.out.println(cnode); rootNode = new DefaultMutableTreeNode("Rules"); treeModel = new DefaultTreeModel(rootNode); treeModel.addTreeModelListener(new RuleTreeModelListener()); //cnode="nullString"; tree = new JTree(treeModel); tree.setEditable(true); tree.getSelectionModel().setSelectionMode (TreeSelectionModel.SINGLE_TREE_SELECTION); tree.setShowsRootHandles(true); scrollPane = new JScrollPane(tree); setLayout(new GridLayout(1,0)); add(scrollPane); tree.getSelectionModel().setSelectionMode (TreeSelectionModel.SINGLE_TREE_SELECTION); //Listen for when the selection changes. tree.addTreeSelectionListener(new TreeSelectionListener() { public void valueChanged(TreeSelectionEvent e) { //System.out.println("path"+tree.getSelectionPath()); DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent(); if (node==null){return;} else{ cnode=""+node; System.out.println("Please not here:"+cnode); } Object nodeInfo = node.getUserObject(); if (node.isLeaf()) { //System.out.println("isLeaf"); } else { //System.out.println("isnotLeaf"); } } }); } /** Remove all nodes except the root node. */ public void clear() { rootNode.removeAllChildren(); treeModel.reload(); } public JScrollPane getScrollPane(){return scrollPane;} /** Remove the currently selected node. */ 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; } } // Either there was no selection, or the root was selected. toolkit.beep(); } /** Add child to the currently selected node. */ 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); } public DefaultMutableTreeNode addObject(DefaultMutableTreeNode parent, Object child) { return addObject(parent, child, false); } 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()); // Make sure the user can see the lovely new node. if (shouldBeVisible) { tree.scrollPathToVisible(new TreePath(childNode.getPath())); } return childNode; } class RuleTreeModelListener implements TreeModelListener { public void treeNodesChanged(TreeModelEvent e) { DefaultMutableTreeNode node; node = (DefaultMutableTreeNode) (e.getTreePath().getLastPathComponent()); /* * If the event lists children, then the changed * node is the child of the node we've already * gotten. Otherwise, the changed node and the * specified node are the same. */ try { int index = e.getChildIndices()[0]; node = (DefaultMutableTreeNode) (node.getChildAt(index)); } catch (NullPointerException exc) {} System.out.println("The user has finished editing the node."); System.out.println("New value: " + node.getUserObject()); } public void treeNodesInserted(TreeModelEvent e) { } public void treeNodesRemoved(TreeModelEvent e) { } public void treeStructureChanged(TreeModelEvent e) { } } }