Swing: обнаружение движения мыши по общему пути - PullRequest
2 голосов
/ 09 февраля 2011

Я рисую некоторые сплайны, используя GeneralPath следующим образом:

GeneralPath path = new GeneralPath();
path.moveTo(x0, y0);
path.curveTo(x0 + 100, y0, x1 - 100, y1, x1, y1);
((Graphics2D) g).draw(path);

По сути, это рисует сплайн, который выглядит как кабель или провод, между точкой (x0; y0) и точкой (x1; y1).

p0 --
     \
      \
       `-- p1

Рисунок в порядке, но теперь я хотел бы определить, когда мышь перемещается при наведении этого сплайна.Проблема в том, что метод contains(Point), кажется, не делает то, что я хочу.Он возвращает true, если Point находится внутри области между сплайном и прямой линией между (x0; y0) и (x1; y1).

В приведенном выше примере он вернет true длявся область "звезд":

p0 -----------
     *********\
         ******\
             ***\
                *\* 
                  \******* 
                   `------------- p1

Но только хотите определить, когда точка точно расположена на сплайне.

Есть ли способ добиться того, чего я хочу?

Любые идеи с благодарностью!

РЕДАКТИРОВАТЬ: я нашел объяснение моей проблемы в документации, но это не помогает мне найти решение:

Содержит иМетоды intersects рассматривают внутреннюю часть Shape как область, которую он охватывает, как если бы он был заполнен.Это означает, что эти методы рассматривают незакрытые фигуры как неявно закрытые с целью определения, содержит ли фигура прямоугольник или пересекает его или фигура содержит точку.

1 Ответ

1 голос
/ 09 февраля 2011

Просто сделайте кривую, чтобы вернуться к начальной точке. Но пользователю будет очень, очень трудно получить точно по вашей кривой!

...