Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package draw;
- import java.awt.Color;
- import java.awt.Graphics;
- import java.awt.Graphics2D;
- import java.awt.Image;
- import java.awt.RenderingHints;
- import java.awt.Shape;
- import java.awt.event.MouseAdapter;
- import java.awt.event.MouseEvent;
- import java.awt.event.MouseListener;
- import java.awt.event.MouseMotionAdapter;
- import java.awt.event.MouseMotionListener;
- import javax.swing.JComponent;
- import javax.swing.JOptionPane;
- import java.awt.geom.*;
- import java.util.LinkedList;
- public class DrawArea extends JComponent {
- // image you are going to draw
- private Image image;
- // you are going to draw on
- private Graphics2D g2;
- // co-ordinates of mouse
- private int oldX, oldY, newX, newY;
- // alist to store the shapes
- LinkedList<Shape> shapeList = new LinkedList<>();
- Rectangle2D.Float selector = new Rectangle2D.Float();
- MouseListener drawcircle = new MouseAdapter() {
- public void mouseClicked(MouseEvent e) {
- oldX = e.getX();
- oldY = e.getY();
- String fn = JOptionPane.showInputDialog("Enter diameter of circle");
- int diameter = Integer.parseInt(fn);
- Ellipse2D.Float circle = new Ellipse2D.Float(oldX - diameter / 2, oldY - diameter / 2, diameter, diameter);
- g2.draw(circle);
- shapeList.add(circle);
- repaint();
- }
- };
- MouseListener drawRectangle = new MouseAdapter() {
- public void mouseClicked(MouseEvent e) {
- oldX = e.getX();
- oldY = e.getY();
- String fn = JOptionPane.showInputDialog("Enter Width of rectangle");
- String sn = JOptionPane.showInputDialog("Enter height of rectangle");
- int width = Integer.parseInt(fn);
- int height = Integer.parseInt(sn);
- Rectangle2D.Float rect = new Rectangle2D.Float(oldX - (width / 2), oldY - (height / 2), width, height);
- g2.draw(rect);
- shapeList.add(rect);
- repaint();
- }
- };
- MouseListener drawSquare = new MouseAdapter() {
- public void mouseClicked(MouseEvent e) {
- oldX = e.getX();
- oldY = e.getY();
- String fn = JOptionPane.showInputDialog("Enter the dimension of square");
- int dimension = Integer.parseInt(fn);
- Rectangle2D.Float square = new Rectangle2D.Float(oldX - (dimension / 2), oldY - (dimension / 2), dimension,
- dimension);
- g2.draw(square);
- shapeList.add(square);
- repaint();
- }
- };
- MouseListener drawPoint = new MouseAdapter() {
- public void mouseClicked(MouseEvent e) {
- oldX = e.getX();
- oldY = e.getY();
- g2.drawLine(oldX, oldY, oldX + 1, oldY + 1);
- repaint();
- }
- };
- MouseMotionListener drawFree = new MouseAdapter() {
- public void mouseDragged(MouseEvent e) {
- newX = e.getX();
- newY = e.getY();
- if (g2 != null) {
- g2.drawLine(oldX, oldY, newX, newY);
- // refresh the view
- repaint();
- oldX = newX;
- oldY = newY;
- }
- }
- };
- MouseListener changeColor = new MouseAdapter() {
- public void mouseClicked(MouseEvent e) {
- int colouringArea = 0;
- selector.height = Float.MAX_VALUE;
- boolean found = false;
- for (int i = 0; i < shapeList.size(); i++) {
- if (shapeList.get(i).contains(e.getX(), e.getY())) {
- if (selector.getHeight() > shapeList.get(i).getBounds2D().getHeight()) {
- selector = (Rectangle2D.Float) shapeList.get(i).getBounds2D();
- colouringArea = i;
- found = true;
- }
- }
- }
- if (found == true) {
- Area first = new Area(shapeList.get(colouringArea));
- for (int i = 0; i < shapeList.size(); i++) {
- if (colouringArea != i && shapeList.get(i).contains(e.getX(), e.getY()) == false) {
- Area second = new Area(shapeList.get(i));
- first.subtract(second);
- } else if (colouringArea != i && shapeList.get(i).contains(e.getX(), e.getY()) == true
- && ((Rectangle2D.Float) shapeList.get(i).getBounds2D()).contains(
- (Rectangle2D.Float) shapeList.get(colouringArea).getBounds2D()) == false) {
- Area second = new Area(shapeList.get(i));
- first.intersect(second);
- }
- }
- g2.fill(first);
- repaint();
- }
- }
- };
- public DrawArea() {
- // decide whether you use a buffer to draw or not
- setDoubleBuffered(false);
- addMouseListener(drawPoint);
- addMouseMotionListener(drawFree);
- addMouseListener(new MouseAdapter() {
- public void mousePressed(MouseEvent e) {
- oldX = e.getX();
- oldY = e.getY();
- }
- });
- }
- // it is automatically called when we call repaint()
- protected void paintComponent(Graphics g) {
- // TODO Auto-generated method stub
- if (image == null) {
- // create dimensions of the image
- image = createImage(getSize().width, getSize().height);
- // g2 draw on image
- g2 = (Graphics2D) image.getGraphics();
- g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
- // clear
- clear();
- }
- // here we draw image to draw on
- g.drawImage(image, 0, 0, null);
- }
- private void clear() {
- // choose a colour for paint
- g2.setPaint(Color.white);
- g2.fillRect(0, 0, getSize().width, getSize().height);
- g2.setPaint(Color.black);
- repaint();
- }
- public void Blue() {
- g2.setPaint(Color.blue);
- }
- public void red() {
- g2.setPaint(Color.red);
- }
- public void yellow() {
- g2.setPaint(Color.yellow);
- }
- public void black() {
- g2.setPaint(Color.black);
- }
- public void drawRect() {
- removeMouseListener(changeColor);
- removeMouseListener(drawSquare);
- removeMouseListener(drawRectangle);
- addMouseListener(drawRectangle);
- removeMouseListener(drawPoint);
- removeMouseMotionListener(drawFree);
- removeMouseListener(drawcircle);
- }
- public void freeDrawing() {
- removeMouseListener(changeColor);
- removeMouseListener(drawSquare);
- removeMouseListener(drawPoint);
- removeMouseListener(drawRectangle);
- removeMouseListener(drawcircle);
- removeMouseMotionListener(drawFree);
- addMouseListener(drawPoint);
- addMouseMotionListener(drawFree);
- }
- public void drawCircle() {
- removeMouseListener(changeColor);
- removeMouseListener(drawSquare);
- removeMouseListener(drawcircle);
- addMouseListener(drawcircle);
- removeMouseListener(drawRectangle);
- removeMouseListener(drawPoint);
- removeMouseMotionListener(drawFree);
- }
- public void drawsquare() {
- removeMouseListener(changeColor);
- removeMouseListener(drawSquare);
- removeMouseListener(drawcircle);
- addMouseListener(drawSquare);
- removeMouseListener(drawRectangle);
- removeMouseListener(drawPoint);
- removeMouseMotionListener(drawFree);
- }
- public void changeColor() {
- removeMouseListener(changeColor);
- addMouseListener(changeColor);
- removeMouseListener(drawSquare);
- removeMouseListener(drawcircle);
- removeMouseListener(drawSquare);
- removeMouseListener(drawRectangle);
- removeMouseListener(drawPoint);
- removeMouseMotionListener(drawFree);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement