To load this file without formatting, visit http://whoyouknow.co.uk/ants/AntGraph/java/2/src/antgraph/gui/GraphCanvas.java. This is a spam-protection measure; sorry for the inconvenience.
· GraphCanvas.java ·
1/* 2 * GraphView.java 3 * 4 * Created on 04 March 2007, 13:21 5 * 6 * To change this template, choose Tools | Template Manager 7 * and open the template in the editor. 8 */ 9 10package antgraph.gui; 11 12import antgraph.Edge; 13import antgraph.Graph; 14import antgraph.NoSuchNodeException; 15import antgraph.Node; 16import java.awt.Canvas; 17import java.awt.Color; 18import java.awt.Graphics; 19import java.awt.event.MouseAdapter; 20import java.awt.event.MouseEvent; 21import java.awt.event.MouseMotionAdapter; 22import java.awt.image.BufferedImage; 23 24/** 25 * 26 * @author James 27 */ 28public class GraphCanvas extends Canvas implements Runnable { 29 30 private BufferedImage bi; 31 private Graphics big; 32 private Thread animate; 33 34 public static final int WIDTH = 500, HEIGHT = 500; 35 private Graph graph; 36 private Node selectedNode = null; 37 private Edge selectedEdge = null; 38 39 boolean dragging = false; 40 /** Creates a new instance of GraphView */ 41 public GraphCanvas() { 42 this(new Graph()); 43 } 44 45 public GraphCanvas(Graph g) { 46 setSize(WIDTH, HEIGHT); 47 this.graph = g; 48 49 50 51 this.addMouseListener( new MouseAdapter() { 52 public void mousePressed(MouseEvent e) { 53 54 if(e.getButton() == e.BUTTON1) { 55 if(containsNode(e.getX(), e.getY())) { 56 if(nodeSelected()) { 57 Node a = getSelectedNode(); 58 Node b = nodeAt(e.getX(), e.getY()); 59 60 try { 61 graph.addEdge(a, b); 62 deselectNode(); 63 }catch (NoSuchNodeException ex) { 64 System.out.println(ex); //shouldn't happen 65 } 66 }else{ 67 deselectEdge(); 68 setSelectedNode(nodeAt(e.getX(), e.getY())); 69 } 70 }else if(containsEdge(e.getX(), e.getY())) { 71 72 deselectAll(); 73 74 setSelectedEdge(edgeAt(e.getX(), e.getY())); 75 76 }else{ 77 78 if(nodeSelected()) { 79 80 graph.addNode(e.getX(), e.getY()); 81 try { 82 graph.addEdge(getSelectedNode(), nodeAt(e.getX(), e.getY())); 83 }catch (NoSuchNodeException ex) { 84 System.out.println(ex); //shouldn't happen 85 } 86 87 deselectNode(); 88 }else{ 89 90 graph.addNode(e.getX(), e.getY()); 91 } 92 } 93 }else if(e.getButton() == e.BUTTON3) { 94 if(containsNode(e.getX(), e.getY())) { 95 deselectNode(); 96 97 graph.removeNode(nodeAt(e.getX(), e.getY())); 98 }else if(containsEdge(e.getX(), e.getY())) { 99 deselectEdge(); 100 101 graph.removeEdge(edgeAt(e.getX(), e.getY())); 102 } 103 } 104 graph.print(); 105 } 106 107 108 public void mouseReleased(MouseEvent e) { 109 if(dragging) { 110 deselectNode(); 111 dragging = false; 112 } 113 } 114 115 }); 116 117 addMouseMotionListener( new MouseMotionAdapter() { 118 public void mouseDragged(MouseEvent e) { 119 120 if(nodeSelected()) { 121 dragging = true; 122 getSelectedNode().setLocation(e.getX(), e.getY()); 123 124 } 125 } 126 }); 127 128 bi = new BufferedImage(getWidth(),getHeight(),BufferedImage.TYPE_INT_RGB); 129 big = bi.createGraphics(); 130 animate = null; 131 animate = new Thread(this); 132 animate.start(); 133 } 134 135 public Graph getGraph() { 136 return graph; 137 } 138 139 public void setGraph(Graph graph) { 140 this.graph = graph; 141 } 142 143 public void update(Graphics g) { 144 clear(); 145 big.setColor(Color.BLACK); 146 if(graph.getNodes().size() > 0) { 147 148 if(graph.getEdges().size() > 0) { 149 150 for(Edge e : graph.getEdges()) { 151 152 e.draw(big); 153 154 } 155 } 156 157 for(Node n : graph.getNodes()) { 158 n.draw(big); 159 } 160 161 162 } 163 g.drawImage(bi, 0, 0, this); 164 } 165 166 public void paint(Graphics g) { 167 update(g); 168 } 169 170 171 public void clear() { 172 big.setColor(Color.WHITE); 173 big.fillRect(0,0,getWidth(),getHeight()); 174 } 175 176 177 178 public void run() { 179 while(animate!=null) { 180 181 try { 182 animate.sleep(200); 183 184 repaint(); 185 }catch (Exception e) { 186 System.out.println(e); 187 } 188 189 } 190 big.dispose(); 191 } 192 193 public boolean containsNode(int x, int y) { 194 for(Node n : graph.getNodes()) 195 if(n.contains(x, y)) 196 return true; 197 return false; 198 } 199 200 public Node nodeAt(int x, int y) { 201 for(Node n : graph.getNodes()) 202 if(n.contains(x, y)) 203 return n; 204 return null; 205 } 206 207 public boolean containsEdge(int x, int y) { 208 for(Edge e : graph.getEdges()) 209 if(e.contains(x, y)) 210 return true; 211 return false; 212 } 213 214 public Edge edgeAt(int x, int y) { 215 for(Edge e : graph.getEdges()) 216 if(e.contains(x, y)) 217 return e; 218 return null; 219 } 220 221 public void setSelectedNode(Node n) { 222 if(getSelectedNode() != null) getSelectedNode().setSelected(false); 223 n.setSelected(true); 224 selectedNode = n; 225 } 226 227 public Node getSelectedNode() { 228 return selectedNode; 229 } 230 231 public void deselectNode() { 232 if(getSelectedNode() != null) { 233 getSelectedNode().setSelected(false); 234 selectedNode = null; 235 } 236 } 237 238 public boolean nodeSelected() { 239 return selectedNode != null; 240 } 241 242 public void setSelectedEdge(Edge e) { 243 if(getSelectedEdge() != null) getSelectedEdge().setSelected(false); 244 e.setSelected(true); 245 selectedEdge = e; 246 247 } 248 public Edge getSelectedEdge() { 249 return selectedEdge; 250 } 251 252 public void deselectEdge() { 253 if(getSelectedEdge() != null) { 254 getSelectedEdge().setSelected(false); 255 selectedEdge = null; 256 } 257 } 258 259 public void deselectAll() { 260 deselectEdge(); 261 deselectNode(); 262 } 263 264 public boolean edgeSelected() { 265 return selectedEdge != null; 266 } 267} 268
· GraphCanvas.java ends ·
To load this file without formatting, visit http://whoyouknow.co.uk/ants/AntGraph/java/2/src/antgraph/gui/GraphCanvas.java. This is a spam-protection measure; sorry for the inconvenience.