/* -------------------------------------------------------------------------- */ /* */ /* P-TREE WINDOW */ /* */ /* Frans Coenen */ /* */ /* Monday 7 July 2003 */ /* */ /* Department of Computer Science */ /* The University of Liverpool */ /* */ /* -------------------------------------------------------------------------- */// JAVA NODES import java.awt.*; import java.awt.geom.*; // Java extension packages import javax.swing.*; // Other packages //import lucsKDD_ARM.*; public class PtreeWindow extends JFrame { // ------------------- FIELDS ------------------------ /* CONSTANTS */ static final int NODE_WIDTH = 60; static final int NODE_HEIGHT = 13; static final int ARC_WIDTH = 10; static final int ARC_HEIGHT = 10; static final int GAP_WIDTH = 28; static final int GAP_HEIGHT = 22; static final int BORDER = 20; static int maxXindex = 0; static int maxYindex = 0; static int numOneItemSets = 0; // ------------------ CONSTRUCTORS ------------------- public PtreeWindow(PtreeNodeTop[] startPtreeRef) { super("P-tree Structure"); numOneItemSets=startPtreeRef.length-1; // Determine size of drawing area int numNodesWidth = areaSize(startPtreeRef); int numNodesHeight = 0; if (numOneItemSets>7) numNodesHeight = (int) Math.pow(2.0,8.5); else numNodesHeight = (int) Math.pow(2.0,numOneItemSets); System.out.println("numOneItemSets = " + numOneItemSets); System.out.println("numNodesWidth = " + numNodesWidth + ", numNodesHeight = " + numNodesHeight); // Create drawing area PtreeCanvas canvas = new PtreeCanvas(numNodesHeight,numNodesWidth, startPtreeRef); canvas.setBackground(new Color(255,255,204)); int width = BORDER+(numNodesWidth*NODE_WIDTH)+((numNodesWidth-1)* GAP_WIDTH)+BORDER; int height = 40 + (numNodesHeight*NODE_HEIGHT)+((numNodesHeight-1)* GAP_HEIGHT)+BORDER; canvas.setPreferredSize(new Dimension(width,height)); // Create scroll pane JScrollPane sp1 = new JScrollPane(canvas); // Get container and add scroll pane Container container = getContentPane(); container.setBackground(Color.pink); //container.setLayout(new BorderLayout(5,5)); // 5 pixel gaps container.add(sp1); setSize(400,300); setVisible(true); } // ------------------ METHODS ------------------------ /* --------------------------------------------------------- */ /* */ /* DIMENSION CANVAS */ /* */ /* --------------------------------------------------------- */ /* AREA SIZE */ /** Returns size of drawing area. @param treeRef the reference to start of P-tree*/ private int areaSize(PtreeNodeTop[] treeRef) { // Empty tree branch if (treeRef==null) return(0); // Count number of nodes in top row int numNodes=treeRef.length-1; // Find last node with non-zero support for (int index=numNodes;index>0;index--) { if (treeRef[index]!=null) return(areaSize(numNodes, treeRef[index].childRef)); } // No supported nodes in top branch therefore return 0 return(0); } /** Recursively dertermines number of nodes in last branch of P-tree level per level. @param sizeSoFar the number of P-tree nodes counted sofar. @param treeRef the reference to start of P-tree. */ private int areaSize(int sizeSofar, PtreeNode treeRef) { // Empty tree branch if (treeRef==null) return(sizeSofar); // Count number of nodes PtreeNode markerRef=null; while (treeRef!=null) { sizeSofar++; markerRef = treeRef; treeRef = treeRef.siblingRef; } // Continue if fyurther branch if (markerRef == null) return(sizeSofar); else return(areaSize(sizeSofar,markerRef.childRef)); } }