import java.util.*; import java.awt.*; import java.awt.event.*; import java.awt.Dimension; import javax.swing.*; import javax.swing.event.*; public class PLCanvas extends JPanel { Vector drawing; java.awt.Point a, b; String mode = null; public PLCanvas() { super(new BorderLayout()); setPreferredSize(new Dimension(831, 570)); setBackground(new Color(255,255,255)); } public void clear() { this.mode = null; } public void setVector(Vector drawing) { this.drawing = drawing; } public void draw(java.awt.Point a, java.awt.Point b, String mode) { this.a = a; this.b = b; this.mode = mode; } public static void liveDraw(int x, int y, int pressedX, int pressedY, PLCanvas canvas, String mode){ int x1 = pressedX, y1 = pressedY, x2 = x, y2 = y; if(mode != "Line"){ if (x < pressedX){ x1 = x; x2 = pressedX; } if (y < pressedY){ y1 = y; y2 = pressedY; } } int xDist = x2-x1; int yDist = y2-y1; if(mode == "Line") canvas.draw(new java.awt.Point(x1,y1),new java.awt.Point(x2,y2),mode); if(mode == "Square" || mode == "Circle"){ if (xDist < yDist){ yDist = xDist; if(y < pressedY) y1 = y2 - yDist; } else { xDist = yDist; if(x < pressedX) x1 = x2 - xDist; } canvas.draw(new java.awt.Point(x1,y1),new java.awt.Point(xDist,yDist),mode); } if(mode == "Rectangle" || mode == "Oval") canvas.draw(new java.awt.Point(x1,y1),new java.awt.Point(xDist,yDist),mode); } protected void paintComponent(Graphics g) { super.paintComponent(g); if(drawing != null) { for(int i = 0; i < drawing.size(); i++) { Vector v = (Vector) drawing.get(i); if(((java.awt.Point)v.get(0)).x == -1) { int color = ((java.awt.Point)v.get(1)).y; switch (color) { case 0: g.setColor(Color.BLACK); break; case 1: g.setColor(Color.RED); break; case 2: g.setColor(Color.ORANGE); break; case 3: g.setColor(Color.YELLOW); break; case 4: g.setColor(Color.GREEN); break; case 5: g.setColor(Color.BLUE); break; case 6: g.setColor(Color.MAGENTA); break; default: g.setColor(Color.BLACK); break; } } else { for(int x = 1; x < v.size(); x++) { java.awt.Point p1 = (java.awt.Point) v.get(x-1); java.awt.Point p2 = (java.awt.Point) v.get(x); g.drawLine(p1.x,p1.y,p2.x,p2.y); } } } } if(mode == "Line") g.drawLine(a.x,a.y,b.x,b.y); if(mode == "Rectangle" || mode == "Square") g.drawRect(a.x,a.y,b.x,b.y); if(mode == "Oval" || mode == "Circle") g.drawOval(a.x,a.y,b.x,b.y); } }