In general I would like have many shapes and check if mouse is over some shape. 
So my approach currently is like this:
[code]
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;

import javax.swing.*;

@SuppressWarnings("serial")
public class MouseOverShapes extends JComponent {
  private Line2D line;
  private Arc2D arc;
  private boolean overLine;
  private boolean overArc;

  public MouseOverShapes() {
    line = new Line2D.Double(10, 10, 200, 100);
    arc = new Arc2D.Double(40, 40, 150, 150, 0, 210, Arc2D.CHORD);
    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);
        if (intersects != overLine) {
          overLine = intersects;
          repaint();
        }
        intersects = arc.intersects(rect);
        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);
    g2d.draw(line);
    g2d.setColor(overArc ? Color.red : Color.black);
    g2d.draw(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]
But Shape.intersects(...) check intersection of [b]interior of Shape[/b] and 
not it's contour. At the same time intersection with Line2D (which doesn't have 
any interior at all) works as I need. Is it possible somehow to check 
intersection of contour and not interior? Or may be my approach for finding 
shapes under mouse cursor is completely wrong?
[Message sent by forum member 'kamre' (kamre)]

http://forums.java.net/jive/thread.jspa?messageID=326769

===========================================================================
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".

Reply via email to