
 


import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.geom.*;
import javax.swing.border.TitledBorder;

public class MouseDragAndDrop extends JFrame {
 Canvas1 canvas;
  JLabel label;

  public MouseDragAndDrop() {
  super();
  Container container = getContentPane();
  canvas = new Canvas1();
  container.add(canvas);
  JPanel panel = new JPanel();
  panel.setLayout(new GridLayout(1, 2));
  label = new JLabel("");
  panel.add(label);
  container.add(panel, BorderLayout.SOUTH);
  setSize(600,300);
  setVisible(true);
  }
  public static void main(String arg[]) {
  new MouseDragAndDrop();
  }
  class Canvas1 extends JPanel {
  double p, q, width, height;
  int p1, q1, p2, q2;
  Rectangle2D rect1,rect2;
  Rectangle2D rectangle;
  Cursor cursor;
  public Canvas1() {
  p = 25;
  q = 25;
  width = 90;
  height = 70;
  addMouseListener(new EventMouseListener());
  addMouseMotionListener(new EventMouseMotionListener());
  }
  public void paint(Graphics g) {
  Graphics2D g2 = (Graphics2D) g;
  rect1 = new Rectangle2D.Double(p, q, width, height);
  g2.draw(rect1);
  if (rectangle != null) {
  drawSquares(g2, rectangle);
  }
  if (cursor != null)
  setCursor(cursor);
  }
  public void drawSquares(Graphics2D g2, Rectangle2D rect) {
  double p = rect.getX();
  double q = rect.getY();
  double width = rect.getWidth();
  double height = rect.getHeight();
  g2.setColor(Color.black);
  }
 class EventMouseListener extends MouseAdapter {
  public void mousePressed(MouseEvent event) {
  rect2 = rect1;
  rectangle = rect1.getBounds2D();
  display(rect2);
  p1 = event.getX();
  q1 = event.getY();
  }
  public void mouseReleased(MouseEvent event) {
  rectangle = rect1.getBounds2D();
  rect2 = rect1;
  display(rect2);
 }
  public void mouseClicked(MouseEvent event) {
  rect2 = rect1;
  rectangle = rect1.getBounds2D();
  display(rect2);
  }
 }
  class EventMouseMotionListener extends MouseMotionAdapter {
  public void mouseDragged(MouseEvent event) {
  if (rect1.contains(event.getX(), event.getY())) {
  rectangle = null;
  rect2 = rect1;
  p2 = event.getX();
  q2 = event.getY();
  p = p + p2 - p1;
  q = q + q2 - q1;
  p1 = p2;
  q1 = q2;
  }
  if (rect2 != null)
  display(rect2);
  canvas.repaint();
  }
  public void mouseMoved(MouseEvent event) {
 cursor = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
 }
  }
  public void display(Shape shape) {
  double p = rect2.getX();
  double q = rect2.getY();
  double width= rect2.getWidth();
  double height = rect2.getHeight();
  String st = "(" + Double.toString(p)+","+Double.toString(q) + ")";
  String sizeString = "(" + Double.toString(width) + ","+
    Double.toString(height) + ")";
  label.setText(st);
  }
  }
}