package edu.mbl.jif.gui.imaging; import edu.mbl.jif.gui.imaging.zoom.ImagePanelZoomable; import edu.mbl.jif.utils.StaticSwingUtils; import java.awt.Cursor; import java.awt.Image; import java.awt.Point; import java.awt.Toolkit; import java.awt.event.MouseEvent; import java.awt.geom.Point2D; import java.net.URL; import javax.swing.event.MouseInputAdapter; /** * This is used in getting a point from an ImagePanel * * @author GBH */ public class PointGetter { ImagePanelZoomable iPane; GraphicOverlay overlay; MouseListenerPointGetter mListenerPointGetter = new MouseListenerPointGetter(); Point thePoint; PointGetterCallback caller; public PointGetter(ImagePanelZoomable iPane) { this.iPane = iPane; } public void setCallback(PointGetterCallback caller) { this.caller = caller; } public void setupToPoint() { iPane.setMouseInputAdapter(mListenerPointGetter); // for custom Cursor Toolkit toolkit = Toolkit.getDefaultToolkit(); URL url = getClass().getResource("icons/pointCursor.gif"); Image cursorImage = toolkit.getImage(url); Point cursorHotSpot = new Point(15, 15); Cursor customCursor = toolkit.createCustomCursor(cursorImage, cursorHotSpot, "Cursor"); iPane.setCursor(customCursor); } private void getCurrentPoint(final MouseEvent e) { StaticSwingUtils.dispatchToEDT(new Runnable() { public void run() { Point2D zc = iPane.toUserSpace(e.getX(), e.getY()); int x = (int) (zc.getX()); int y = (int) (zc.getY()); thePoint = new Point(x, y); iPane.restoreDefaultMouseInputAdapter(); iPane.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR)); caller.callbackFromPointGetter(thePoint); } }); } class MouseListenerPointGetter extends MouseInputAdapter { public void mouseClicked(MouseEvent e) { getCurrentPoint(e); } public void mousePressed(MouseEvent e) { } public void mouseDragged(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void mouseMoved(MouseEvent e) { iPane.valuePoint(e); } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } } }