Command.java
/** * @author aassd * * To change this generated comment edit the template variable "typecomment": * Window>Preferences>Java>Templates. * To enable and disable the creation of type comments go to * Window>Preferences>Java>Code Generation. */
public interface Command { public final static int LINE = 2; public final static int CIRCLE = 4; public final static int RECTANGLE = 8; }
ICircle.java
import java.awt.*;
/** * @author aassd * * To change this generated comment edit the template variable "typecomment": * Window>Preferences>Java>Templates. * To enable and disable the creation of type comments go to * Window>Preferences>Java>Code Generation. */ public class ICircle implements Shape { private Color color; private int x; private int y; private int width; private int height;
public ICircle(int x, int y, int width, int height, Color color) { this.x = x; this.y = y; this.width = width; this.height = height; this.color = color; } public void draw(Graphics g) { g.setColor(color); g.drawArc(x, y, width, height, 0, 360); }
}
ILine.java
import java.awt.*;
/** * @author aassd * * To change this generated comment edit the template variable "typecomment": * Window>Preferences>Java>Templates. * To enable and disable the creation of type comments go to * Window>Preferences>Java>Code Generation. */ public class ILine implements Shape { private int x1; private int y1; private int x2; private int y2; private Color color;
public ILine(int x1, int y1, int x2, int y2, Color color) { this.x1 = x1; this.y1 = y1; this.x2 = x2; this.y2 = y2; this.color = color; }
public void draw(Graphics g) { g.setColor(color); g.drawLine(x1, y1, x2, y2); } }
IRectangle.java
import java.awt.*; import java.awt.event.*; import java.util.Vector;
/** * @author aassd * * To change this generated comment edit the template variable "typecomment": * Window>Preferences>Java>Templates. * To enable and disable the creation of type comments go to * Window>Preferences>Java>Code Generation. */ public class IRectangle implements Shape { private int x; private int y; private int width; private int height; private Color color;
public IRectangle(int x, int y, int width, int height, Color color) { this.x = x; this.y = y; this.width = width; this.height = height; this.color = color; }
public void draw(Graphics g) { g.setColor(color); g.drawRect(x, y, width, height); }
}
PaintApp.java
import java.awt.*; import java.awt.event.*; import java.util.*;
/** * @author aassd * * To change this generated comment edit the template variable "typecomment": * Window>Preferences>Java>Templates. * To enable and disable the creation of type comments go to * Window>Preferences>Java>Code Generation. */ public class PaintApp extends Frame { Panel commandPanel = new Panel(); Panel colorPanel = new Panel(); Panel shapePanel = new Panel();
Button btnRed = new Button("Red"); Button btnGreen = new Button("Green"); Button btnBlue = new Button("Blue");
Button btnLine = new Button("Line"); Button btnRectangle = new Button("Rectangle"); Button btnCircle = new Button("Circle");
Button btnUndo = new Button("Undo"); Button btnRedo = new Button("Redo"); Button btnExit = new Button("Exit");
PaintBoard paintBoard = new PaintBoard();
public PaintApp() { this.setLayout(new BorderLayout());
btnLine.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { btnLine_actionPerformed(e); } }); btnRectangle.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { btnRectangle_actionPerformed(e); } }); btnCircle.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { btnCircle_actionPerformed(e); } });
btnExit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { btnExit_actionPerformed(e); } }); btnUndo.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { btnUndo_actionPerformed(e); } }); btnRedo.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { btnRedo_actionPerformed(e); } });
shapePanel.setLayout(new FlowLayout()); shapePanel.add(btnLine, null); shapePanel.add(btnRectangle, null); shapePanel.add(btnCircle, null);
shapePanel.add(btnUndo, null); shapePanel.add(btnRedo, null); shapePanel.add(btnExit,null);
btnRed.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { btnRed_actionPerformed(e); } }); btnGreen.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { btnGreen_actionPerformed(e); } }); btnBlue.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { btnBlue_actionPerformed(e); } });
colorPanel.setLayout(new FlowLayout()); colorPanel.add(btnRed, null); colorPanel.add(btnGreen, null); colorPanel.add(btnBlue, null);
commandPanel.setLayout(new BorderLayout()); commandPanel.add(shapePanel, BorderLayout.NORTH); commandPanel.add(colorPanel, BorderLayout.CENTER);
this.add(commandPanel, BorderLayout.SOUTH); this.add(paintBoard, BorderLayout.CENTER);
///////////////////////////////////////////////////////////////////////////
btnLine.setForeground(Color.red); paintBoard.setCommand(Command.LINE);
btnRed.setForeground(Color.red); paintBoard.setColor(Color.red); ///////////////////////////////////////////////////////////////////////////
}
void btnExit_actionPerformed(ActionEvent e) { System.exit(0); }
void btnUndo_actionPerformed(ActionEvent e) { paintBoard.undo(); }
void btnRedo_actionPerformed(ActionEvent e) { paintBoard.redo(); }
void btnLine_actionPerformed(ActionEvent e) { btnLine.setForeground(Color.red); btnRectangle.setForeground(Color.black); btnCircle.setForeground(Color.black); paintBoard.setCommand(Command.LINE); } void btnRectangle_actionPerformed(ActionEvent e) { btnLine.setForeground(Color.black); btnRectangle.setForeground(Color.red); btnCircle.setForeground(Color.black); paintBoard.setCommand(Command.RECTANGLE); } void btnCircle_actionPerformed(ActionEvent e) { btnLine.setForeground(Color.black); btnRectangle.setForeground(Color.black); btnCircle.setForeground(Color.red); paintBoard.setCommand(Command.CIRCLE); }
void btnRed_actionPerformed(ActionEvent e) { btnRed.setForeground(Color.red); btnGreen.setForeground(Color.black); btnBlue.setForeground(Color.black); paintBoard.setColor(Color.red); } void btnGreen_actionPerformed(ActionEvent e) { btnRed.setForeground(Color.black); btnGreen.setForeground(Color.red); btnBlue.setForeground(Color.black); paintBoard.setColor(Color.green); } void btnBlue_actionPerformed(ActionEvent e) { btnRed.setForeground(Color.black); btnGreen.setForeground(Color.black); btnBlue.setForeground(Color.red); paintBoard.setColor(Color.blue); }
public static void main(String[] args) { PaintApp paintApp = new PaintApp(); paintApp.setSize(600, 500); paintApp.setVisible(true); }
}
PaintBoard.java
import java.awt.*; import java.awt.event.*; import java.util.*;
/** * @author aassd * * To change this generated comment edit the template variable "typecomment": * Window>Preferences>Java>Templates. * To enable and disable the creation of type comments go to * Window>Preferences>Java>Code Generation. */
public class PaintBoard extends Canvas implements java.awt.event.MouseListener, java.awt.event.MouseMotionListener { int srcX = 0; int srcY = 0;
int lineToX = 0; int lineToY = 0; boolean bMousePressing = false; java.util.Stack vShapes = new java.util.Stack(); java.util.Stack vDelShapes = new java.util.Stack(); private int command = 0; private Color color; public void undo() { if (vShapes.size() > 0) { Object shape = vShapes.pop(); vDelShapes.push(shape); repaint(); }
} public void redo() { if (vDelShapes.size() > 0) { Object shape = vDelShapes.pop(); vShapes.push(shape); repaint(); } } public void setCommand(int command) { this.command = command; } public void setColor(Color color) { this.color = color; }
public PaintBoard() { this.addMouseListener(this); this.addMouseMotionListener(this); }
public void paint(Graphics g) {
Dimension size = size(); int width = size.width ; int height = size.height; g.setColor(Color.white); g.fillRect(0,0, width,height);
Shape shape = null; java.util.Enumeration enum = vShapes.elements(); g.setColor(Color.blue); while (enum.hasMoreElements()) { shape = (Shape) enum.nextElement(); shape.draw(g); }
if (bMousePressing) { g.setColor(color); switch (command) { case Command.LINE: g.drawLine(srcX, srcY, lineToX, lineToY); break; case Command.RECTANGLE: if (lineToX < srcX) { if (lineToY < srcY) { g.drawRect(lineToX, lineToY, srcX - lineToX , srcY - lineToY); } else { g.drawRect(lineToX, srcY, srcX - lineToX, lineToY - srcY); } } else { if (lineToY < srcY) { g.drawRect(srcX, lineToY, lineToX - srcX, srcY - lineToY); } else { g.drawRect(srcX, srcY, lineToX - srcX, lineToY - srcY); } } break; case Command.CIRCLE: int w = (int)java.lang.Math.sqrt((srcX - lineToX) * (srcX - lineToX) + (srcY - lineToY) * (srcY - lineToY)); g.drawArc(srcX - w/2, srcY - w/2, w, w, 0, 360); break; }//End switch(command) } }
public void mouseClicked(MouseEvent e) { }
public void mousePressed(MouseEvent e) { srcX = e.getX(); srcY = e.getY(); bMousePressing = true; }
public void mouseReleased(MouseEvent e) { lineToX = e.getX(); lineToY = e.getY(); bMousePressing = false; switch (command) { case Command.LINE: ILine line = new ILine(srcX, srcY, lineToX, lineToY, color); vShapes.push(line); break; case Command.RECTANGLE: IRectangle rectangle = null; if (lineToX < srcX) { if (lineToY < srcY) { rectangle = new IRectangle(lineToX, lineToY, srcX - lineToX , srcY - lineToY, color); } else { rectangle = new IRectangle(lineToX, srcY, srcX - lineToX, lineToY - srcY, color); } } else { if (lineToY < srcY) { rectangle = new IRectangle(srcX, lineToY, lineToX - srcX, srcY - lineToY, color); } else { rectangle = new IRectangle(srcX, srcY, lineToX - srcX, lineToY - srcY, color); } } vShapes.push(rectangle); break; case Command.CIRCLE: int w = (int)java.lang.Math.sqrt((srcX - lineToX) * (srcX - lineToX) + (srcY - lineToY) * (srcY - lineToY)); ICircle circle = new ICircle(srcX - w/2, srcY - w/2, w, w, color); vShapes.push(circle); break; } //End switch(command) repaint(); }
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
public void mouseDragged(MouseEvent e) { lineToX = e.getX(); lineToY = e.getY(); repaint(); }
public void mouseMoved(MouseEvent e) { }
}
Shape.java
import java.awt.*; import java.awt.event.*;
/** * @author aassd * * To change this generated comment edit the template variable "typecomment": * Window>Preferences>Java>Templates. * To enable and disable the creation of type comments go to * Window>Preferences>Java>Code Generation. */ public interface Shape { public void draw(Graphics g); }

|