Do "rubber-band" drawingTag(s): AWT
import java.applet.*; import java.awt.*; import java.util.Vector; public class SimpleCAD extends Applet { int w = 200; int h = 200; Vector lines = new Vector(); int np = 0; int x1,y1; int x2,y2; int xl,yl; Image offImg; Graphics offGra; Button btnClear, btnUndo; public void init() { setLayout(new FlowLayout()); btnClear = new Button("Clear"); btnUndo = new Button("Undo"); add(btnClear); add(btnUndo); setBackground(new Color(0).black); setForeground(new Color(0).white); } public void Dragupdate(Graphics g) { /* ** rubber-band effect */ g.setXORMode(getBackground()); setForeground(new Color(0).blue); if (xl != -1){ // erase the old line g.drawLine(x1, y1, xl, yl); if (x2 != -1) { // draw the new one g.drawLine(x1, y1, x2, y2); } } } public void update(Graphics g) { // draw an offScreen drawing Dimension dim = getSize(); if (offGra == null) { offImg = createImage(dim.width, dim.height); offGra = offImg.getGraphics(); } offGra.setColor(new Color(0).black); offGra.fillRect(0,0,dim.width, dim.height); offGra.setColor(new Color(0).white); offGra.setPaintMode(); for (int i=0; i < np; i++) { Rectangle p = (Rectangle)lines.elementAt(i); if (p.width != -1) { offGra.drawLine(p.x, p.y, p.width, p.height); } } // put the OffScreen image OnScreen g.drawImage(offImg,0,0,null); } public boolean handleEvent(Event e) { switch (e.id) { case Event.MOUSE_DOWN: // new starting point x1 = e.x; y1 = e.y; // begin an new drawing process x2 = -1; return true; case Event.MOUSE_UP: // end a drawing process lines.addElement(new Rectangle(x1, y1, e.x, e.y)); np++; x2 = xl = -1; repaint(); return true; case Event.MOUSE_DRAG: // xl yl line to be erased xl = x2; yl = y2; // x2 y2 last current point x2 = e.x; y2 = e.y; Dragupdate(getGraphics()); return true; } return super.handleEvent(e); } public boolean action(Event e, Object o) { if (e.target == btnClear) resetDrawing(); if (e.target == btnUndo) undo(); return true; } public void undo() { if (np>0) { lines.removeElementAt(np-1); np--; repaint(); } } public void resetDrawing() { lines.removeAllElements(); np=0; repaint(); } }
mail_outline
Send comment, question or suggestion to howto@rgagnon.com
Send comment, question or suggestion to howto@rgagnon.com