Sensing Hover über den äußeren Rand eines Path2D-Kreises in JPanel [duplizieren]

Diese Frage hat hier bereits eine Antwort:

ollisionserkennung mit komplexen Form 1 Antwort

Also, ich habe ein Programm, das Path2D-Kreise auf JPanel zeichnet. Ich versuche, die Größe des Kreises zu ändern, wenn der Benutzer unten rechts auf den Kreis klickt und ihn zieht. Also, was ich will, ist zu erkennen, wann sie auf dem @ si rechter unterer Rand des Kreises, nicht rechter unterer Rand des Kreises. Grundsätzlich muss ich herausfinden, wie man so etwas macht:

Ich weiß, wie man dies mit Rechtecken mit getBounds () macht, aber wenn Sie getBounds () für einen Kreis verwenden, wird das Quadrat um den Kreis und nicht die Grenzen des tatsächlichen Kreises zurückgegeben. Irgendwelche Ideen, wie ich das zum Laufen bringen kann? Vielen Dank

Hier ist eine verkürzte, lauffähige Version meines Programms:

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Panel;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Path2D;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Editor {

    public static void main(String[] args) {

        JFrame frame = new UMLWindow();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBounds(30, 30, 1000, 700);
        frame.getContentPane().setBackground(Color.white);
        frame.setVisible(true);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}

class UMLWindow extends JFrame {
    Shapes shapeList = new Shapes();
    Panel panel;

    private static final long serialVersionUID = 1L;

    public UMLWindow() {
        addMenus();
        panel = new Panel();
    }

    public void addMenus() {

        getContentPane().add(shapeList);

        setSize(300, 200);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        shapeList.addCircle(100, 100);
    }
}

// Shapes class, used to draw the shapes on the panel
// as well as implements the MouseListener for dragging
class Shapes extends JPanel {
    private static final long serialVersionUID = 1L;

    private List<Path2D> shapes = new ArrayList<Path2D>();
    int currentIndex;

    public Shapes() {
        MyMouseAdapter myMouseAdapter = new MyMouseAdapter();
        addMouseListener(myMouseAdapter);
        addMouseMotionListener(myMouseAdapter);
    }

    public void addCircle(int width, int height) {
        Path2D circ = new Path2D.Double();
        circ.append(new Ellipse2D.Double(442, 269, width, height), true);
        shapes.add(circ);
        repaint();
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        Graphics2D g2 = (Graphics2D) g;
        g2.setStroke(new BasicStroke(2));
        for (Path2D shape : shapes) {
            g2.draw(shape);
        }
    }

    class MyMouseAdapter extends MouseAdapter {

        @Override
        public void mousePressed(MouseEvent e) {

        }

        @Override
        public void mouseDragged(MouseEvent e) {
        }

        @Override
        public void mouseReleased(MouseEvent e) {
        }
    }
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage