FileDocCategorySizeDatePackage
MouseDrag.javaAPI DocExample2957Sun Feb 08 21:33:50 GMT 2004None

MouseDrag.java

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

/** MouseDrag -- implement simple mouse drag in a window.
 */
public class MouseDrag extends Component 
		implements MouseListener, MouseMotionListener {
	/** The Image we are to paint */
	Image curImage;
	/** Kludge for showStatus */
	static Label status;
	/** true if we are in drag */
	boolean inDrag = false;
	/** starting location of a drag */
	int startX = -1, startY = -1;
	/** current location of a drag */
	int curX = -1, curY = -1;

	// "main" method
	public static void main(String[] av) {
		JFrame f = new JFrame("Mouse Dragger");
		Container cp = f.getContentPane();

		if (av.length < 1) {
			System.err.println("Usage: MouseDrag imagefile");
			System.exit(1);
		}
		Image im = Toolkit.getDefaultToolkit().getImage(av[0]);

		// create a MouseDrag object
		MouseDrag j = new MouseDrag(im);

		cp.setLayout(new BorderLayout());
		cp.add(BorderLayout.NORTH,
			new Label("Hello, and welcome to the world of Java"));
		cp.add(BorderLayout.CENTER, j);
		cp.add(BorderLayout.SOUTH, status = new Label());
		status.setSize(f.getSize().width, status.getSize().height);
		f.pack();
		f.setVisible(true);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	// "Constructor" - creates the object
	public MouseDrag(Image i) {
		super();
		curImage = i;
		setSize(300,200);
		addMouseListener(this);
		addMouseMotionListener(this);
	}

	public void showStatus(String s) {
		status.setText(s);
	}

	// Five methods from MouseListener:
	/** Called when the mouse has been clicked on a component. */
	public void mouseClicked(MouseEvent e)  {
	}

	/** Called when the mouse enters a component. */
	public void mouseEntered(MouseEvent e)  {
	}

	/** Called when the mouse exits a component. */
	public void mouseExited(MouseEvent e)  {
	}

	/** Called when the mouse has been pressed. */
	public void mousePressed(MouseEvent e)  {
		Point p = e.getPoint();
		System.err.println("mousePressed at " + p);
		startX = p.x; startY = p.y;
		inDrag = true;
	}

	/** Called when the mouse has been released. */
	public void mouseReleased(MouseEvent e)  {
		inDrag = false;
		System.err.println("SELECTION IS " + startX + "," +
			startY + " to " + curX + "," + curY);
	}

	// And two methods from MouseMotionListener:
	public void mouseDragged(MouseEvent e) {
		Point p = e.getPoint();
		// System.err.println("mouse drag to " + p);
		showStatus("mouse Dragged to " + p);
		curX = p.x; curY = p.y;
		if (inDrag) {
			repaint();
		}
	}

	public void paint(Graphics g) {
		int w = curX - startX, h = curY - startY;
		Dimension d = getSize();
		g.drawImage(curImage, 0, 0, d.width, d.height, this);
		if (startX < 0 || startY < 0)
			return;
		System.err.println("paint:drawRect @[" + startX +"," + startY +
			"] size " + w + "x" + h);
		g.setColor(Color.red);
		g.fillRect(startX, startY, w, h);
	}

	public void mouseMoved(MouseEvent e) {
		showStatus("mouse Moved to " + e.getPoint());
	}
	
}