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.*;
//Use double buffering to remove rectangle flickers and make it repaint faster.
public class move 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("move");
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e) { System.exit(0); }
});
Applet applet = new move();
f.add("Center", applet);
applet.init();
//f.pack();
f.setSize(new Dimension(550, 250));
f.setVisible(true);
}
}
class MyCanvas extends Canvas implements MouseListener, MouseMotionListener // Canvas
{
Rectangle rect = new Rectangle(0, 0, 100, 50);
Graphics2D g2;
int preX, preY;
int finalX, finalY;
boolean isFirstTime = true;
Rectangle area;
boolean pressOut = false;
private String flag= "none";
public MyCanvas()
{
setBackground(Color.white);
addMouseMotionListener(this);
addMouseListener(this);
}
public void mouseClicked(MouseEvent e)
{
preX = e.getX();
preY = e.getY();
flag = "ok";
move.label.setText("Start:" + e.getX() + ", " + e.getY());
}
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 {
// move.label.setText("Drag it.");
// pressOut = true;
//}
//preX = e.getX();
//preY = e.getY();
}
public void mouseDragged(MouseEvent e)
{
//if (!pressOut)
// updateLocation(e);
//else
// move.label.setText("Drag it.");
//finalX = e.getX();
//finalY = e.getY();
}
public void mouseReleased(MouseEvent e)
{
//if (rect.contains(e.getX(), e.getY()))
// updateLocation(e);
//else {
// move.label.setText("Drag it.");
// pressOut = false;
//}
}
public void mouseMoved(MouseEvent e)
{
//int mouseX = 0;
//int mouseY = 0;
//mouseX=e.getX();
//mouseY=e.getY();
//move.label.setText(e.getX() + ", " + e.getY());
//System.out.println("You clicked on "+mouseX+","+mouseY);
// move.label.setText("X");
if(flag == "ok")
{
finalX = e.getX();
finalY = e.getY();
//repaint();
}
}
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()) {
// move.label.setText(rect.getX() + ", " + rect.getY());
// }
// else {
// move.label.setText("drag inside the area.");
// }
// repaint();
// }
/*public void paintComponent(Graphics g)
{
g.drawLine(10, 10, 125, 125);
g.drawLine(preX, preY, finalX, finalY);
}*/
public void paint(Graphics g)
{
//g.drawLine(10, 10, 125, 125);
// g.setColor(Color.black);
// g.drawRect(preX, preY, finalX, finalY );
g.drawLine(preX, preY, finalX, finalY );
// 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;
}
}