Hi, There is an alternative to the mouse point rectangle. Create special sense shapes with a somewhat thicker stroke and test if that sense shape contains the mouse point. I don't know which solution is better. I changed your code to demonstrate. (I took the liberty to set a cross hair cursor for easier testing).
[code] import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import javax.swing.*; @SuppressWarnings("serial") public class MouseOverShapes extends JComponent { private Shape line, senseLine; private Shape arc, senseArc; private boolean overLine; private boolean overArc; public MouseOverShapes() { this.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR)); // create solid stroke with width 1.0f BasicStroke basicStroke = new BasicStroke(1.0f); BasicStroke senseStroke = new BasicStroke(4.0f); // create arc Shape shape = new Arc2D.Double(40, 40, 150, 150, 0, 210, Arc2D.CHORD); // create stroked arc arc = basicStroke.createStrokedShape(shape); senseArc = senseStroke.createStrokedShape(shape); // create line shape = new Line2D.Double(10, 10, 200, 100); // create stroked line line = basicStroke.createStrokedShape(shape); senseLine = senseStroke.createStrokedShape(shape); overLine = false; overArc = false; addMouseMotionListener(new MouseAdapter() { @Override public void mouseMoved(MouseEvent e) { // int r = 2; // int d = 2 * r + 1; // Rectangle rect = new Rectangle(e.getX() - r, e.getY() - r, d, // d); // boolean intersects = line.intersects(rect); boolean intersects = senseLine.contains(e.getPoint()); if (intersects != overLine) { overLine = intersects; repaint(); } // intersects = arc.intersects(rect); intersects = senseArc.contains(e.getPoint()); if (intersects != overArc) { overArc = intersects; repaint(); } } }); } @Override protected void paintComponent(Graphics g) { g.setColor(Color.white); g.fillRect(0, 0, getWidth(), getHeight()); Graphics2D g2d = (Graphics2D) g; g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setColor(overLine ? Color.red : Color.black); // fill instead of draw g2d.fill(line); g2d.setColor(overArc ? Color.red : Color.black); // fill instead of draw g2d.fill(arc); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { JFrame frame = new JFrame("Mouse Over Shapes"); frame.getContentPane().add(new MouseOverShapes()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300, 200); frame.setVisible(true); } }); } } [/code] Piet [Message sent by forum member 'pietblok' (pietblok)] http://forums.java.net/jive/thread.jspa?messageID=327065 =========================================================================== To unsubscribe, send email to lists...@java.sun.com and include in the body of the message "signoff JAVA2D-INTEREST". For general help, send email to lists...@java.sun.com and include in the body of the message "help".