Well, I was able to achive something that I need:

[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;
  private Shape arc;
  private boolean overLine;
  private boolean overArc;

  public MouseOverShapes() {
    // create solid stroke with width 1.0f
    BasicStroke basicStroke = new BasicStroke(1.0f);
    // create arc
    arc = new Arc2D.Double(40, 40, 150, 150, 0, 210, Arc2D.CHORD);
    // create stroked arc
    arc = basicStroke.createStrokedShape(arc);
    // create line
    line = new Line2D.Double(10, 10, 200, 100);
    // create stroked line
    line = basicStroke.createStrokedShape(line);
    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);
    // 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]
Is this the best way?
[Message sent by forum member 'kamre' (kamre)]

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

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