import structure.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.SwingUtilities; import java.awt.*; import java.awt.event.*; import java.util.*; public class chart1 extends JApplet implements MouseListener, MouseMotionListener{ Graph graph1 = new Graph("Description of the Graph"); Graph graph2 = new Graph("Some Other Title"); public Graph currentGraph ; GraphPanel graphPanel = new GraphPanel(); LabelPanel labelPanel = new LabelPanel(); JButton b3; int npos = -1; Vector epos = new Vector(); Color ncolor = Color.white; Color bcolor = Color.black; Color tcolor = Color.black; Color ecolor = Color.black; public void init() { String[]node1ntext = new String[1]; node1ntext[0]= "Step A"; String[]node1nhint = new String[1]; node1nhint[0]= "Hint A"; String[]node2ntext = new String[1]; node2ntext[0]= "Step B"; String[]node2nhint = new String[1]; node2nhint[0]= "Hint for step B"; String[]node3ntext = new String[1]; node3ntext[0]= "Step C"; String[]node3nhint = new String[1]; node3nhint[0]= "Hint for Step C"; String[]node4ntext = new String[1]; node4ntext[0]= "x"; String[]node4nhint = new String[1]; node4nhint[0]= "hint"; String[]node5ntext = new String[1]; node5ntext[0]= "Step B : Part 1"; String[]node5nhint = new String[1]; node5nhint[0]= "Hint to substep B"; String[]node6ntext = new String[1]; node6ntext[0]= "Step B : Part 2"; String[]node6nhint = new String[1]; node6nhint[0]= "Hint to substep B"; String[]node7ntext = new String[1]; node7ntext[0]= "y"; String[]node7nhint = new String[1]; node7nhint[0]= "Hint"; addMouseListener(this); addMouseMotionListener(this); graph1.addNode("node1",node1ntext,ncolor,bcolor,tcolor,1,1,node1nhint,1); graph1.addNode("node2",node2ntext,ncolor,bcolor,tcolor,1,2,node2nhint,1); graph1.addNode("node3",node3ntext,ncolor,bcolor,tcolor,1,3,node3nhint,1); graph1.addEdge("node1","node2","edge1","hint to edge 1",ecolor,0); graph1.addEdge("node2","node3","edge2","hint to edge 2",ecolor,0); graph2.addNode("node4",node4ntext, ncolor,bcolor,tcolor,2,1,node4nhint,2); graph2.addNode("node5",node5ntext, ncolor,bcolor,tcolor,1,2,node5nhint,1); graph2.addNode("node6",node6ntext, ncolor,bcolor,tcolor,3,2,node6nhint,1); graph2.addNode("node7",node7ntext, ncolor,bcolor,tcolor,2,3,node7nhint,2); graph2.addEdge("node4","node5","edge3","hint to edge",ecolor,0); graph2.addEdge("node4","node6","edge4","hint to edge",ecolor,0); graph2.addEdge("node5","node7","edge5","hint to edge",ecolor,0); graph2.addEdge("node6","node7","edge6","hint to edge",ecolor,0); Node n; n = graph1.findNode("node2"); n.addGraph(graph2); currentGraph = graph1; buildUI(getContentPane()); } public void mouseEntered(MouseEvent e) {} public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mouseDragged(MouseEvent e){} public void mouseMoved(MouseEvent e){ Point p=new Point(e.getPoint()); p=SwingUtilities.convertPoint(this,p,graphPanel); System.out.println("*********"); System.out.println(p); npos=-1; epos.removeAllElements(); for(int i=currentGraph.getEdgeSize()-1;i>=0;i--){ Edge eg=currentGraph.getEdge(i); if(eg.contains(p)) { epos.addElement(new Integer(i)); System.out.println("it has an edge"); eg.setColor(Color.green); } else { eg.setColor(ecolor); } } for(int i=currentGraph.getNodeSize()-1;i>=0;i--){ Node n=currentGraph.getNode(i); if(n.contains(p)){ n.setColor(Color.blue, Color.black, Color.yellow); npos = i; //System.out.println("POS: "+pos); } else { n.setColor(ncolor,bcolor,tcolor); } } System.out.println("*********"); repaint(); } public void mouseClicked(MouseEvent e) { Point p=new Point(e.getPoint()); p=SwingUtilities.convertPoint(this,p,graphPanel); for(int i=currentGraph.getNodeSize()-1;i>=0;i--){ Node n=currentGraph.getNode(i); if((n.contains(p)) && (n.getGraph()!=null)) { currentGraph = n.getGraph(); npos = -1; epos.removeAllElements(); repaint(); return; } } } public void buildUI(Container container) { labelPanel.setGraphTitle(currentGraph.title); graphPanel.setBackground(Color.white); b3 = new JButton ("Zoom Out"); b3.setToolTipText("Return to prevous graph."); b3.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ currentGraph = graph1; repaint(); } }); container.add(labelPanel,BorderLayout.NORTH); container.add(graphPanel, BorderLayout.CENTER); container.add(b3,BorderLayout.SOUTH); } class GraphPanel extends JPanel{ public GraphPanel() { setPreferredSize(new Dimension(400, 100)); } public void paintComponent(Graphics g) { super.paintComponent(g); //System.out.println("position: "+pos); labelPanel.setGraphTitle(currentGraph.title); currentGraph.paintComponent(g,npos,epos); } } class LabelPanel extends JPanel { JLabel label1; JLabel label2; public LabelPanel( ){ label1 = new JLabel("Simple Example Description",JLabel.CENTER); label2 = new JLabel("description",JLabel.CENTER); setLayout(new BorderLayout()); setPreferredSize(new Dimension(400, 30)); add(label1, BorderLayout.NORTH); add(label2, BorderLayout.CENTER); } public void setGraphTitle(String s){ label2.setText(s); } } }