Mega Code Archive

 
Categories / Java / Event
 

Move Shape with mouse

import java.applet.Applet; import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Canvas; import java.awt.Color; import java.awt.Dimension; import java.awt.Frame; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Label; import java.awt.Rectangle; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JApplet; //Use double buffering to remove rectangle flickers and make it repaint faster. public class ShapeMover extends JApplet {   static protected Label label = new Label(       "Drag rectangle around within the area");   public void init() {     getContentPane().setLayout(new BorderLayout());     getContentPane().add(new MyCanvas());     getContentPane().add("South", label);   }   public static void main(String s[]) {     Frame f = new Frame("ShapeMover");     f.addWindowListener(new WindowAdapter() {       public void windowClosing(WindowEvent e) {         System.exit(0);       }     });     Applet applet = new ShapeMover();     f.add("Center", applet);     applet.init();     f.pack();     f.setSize(new Dimension(550, 250));     f.show();   } } class MyCanvas extends Canvas implements MouseListener, MouseMotionListener {   Rectangle rect = new Rectangle(0, 0, 100, 50);   Graphics2D g2;   int preX, preY;   boolean isFirstTime = true;   Rectangle area;   boolean pressOut = false;   public MyCanvas() {     setBackground(Color.white);     addMouseMotionListener(this);     addMouseListener(this);   }   public void mousePressed(MouseEvent e) {     preX = rect.x - e.getX();     preY = rect.y - e.getY();     if (rect.contains(e.getX(), e.getY()))       updateLocation(e);     else {       ShapeMover.label.setText("Drag it.");       pressOut = true;     }   }   public void mouseDragged(MouseEvent e) {     if (!pressOut)       updateLocation(e);     else       ShapeMover.label.setText("Drag it.");   }   public void mouseReleased(MouseEvent e) {     if (rect.contains(e.getX(), e.getY()))       updateLocation(e);     else {       ShapeMover.label.setText("Drag it.");       pressOut = false;     }   }   public void mouseMoved(MouseEvent e) {   }   public void mouseClicked(MouseEvent e) {   }   public void mouseExited(MouseEvent e) {   }   public void mouseEntered(MouseEvent e) {   }   public void updateLocation(MouseEvent e) {     rect.setLocation(preX + e.getX(), preY + e.getY());     if (checkRect()) {       ShapeMover.label.setText(rect.getX() + ", " + rect.getY());     } else {       ShapeMover.label.setText("drag inside the area.");     }     repaint();   }   public void paint(Graphics g) {     update(g);   }   public void update(Graphics g) {     Graphics2D g2 = (Graphics2D) g;     Dimension dim = getSize();     int w = (int) dim.getWidth();     int h = (int) dim.getHeight();     g2.setStroke(new BasicStroke(8.0f));     if (isFirstTime) {       area = new Rectangle(dim);       rect.setLocation(w / 2 - 50, h / 2 - 25);       isFirstTime = false;     }     // Clears the rectangle that was previously drawn.     g2.setPaint(Color.white);     g2.fillRect(0, 0, w, h);     g2.setColor(Color.red);     g2.draw(rect);     g2.setColor(Color.black);     g2.fill(rect);   }   boolean checkRect() {     if (area == null) {       return false;     }     if (area.contains(rect.x, rect.y, 100, 50)) {       return true;     }     int new_x = rect.x;     int new_y = rect.y;     if ((rect.x + 100) > area.getWidth()) {       new_x = (int) area.getWidth() - 99;     }     if (rect.x < 0) {       new_x = -1;     }     if ((rect.y + 50) > area.getHeight()) {       new_y = (int) area.getHeight() - 49;     }     if (rect.y < 0) {       new_y = -1;     }     rect.setLocation(new_x, new_y);     return false;   } }