public Line2D find_Line(Point2D p)
{
for(int i = 0; i < lines.size(); i++)
{
Line2D l = (Line2D) lines.get(i);
if(l.contains(p))
{
return l;
}
}
return null;
}
public void remove_Line(Line2D line)
{
if(line == null)
return;
if(line == this.line)
this.line = null;
lines.remove(line);
repaint();
}
public void mouseClicked(MouseEvent e)
{
if(e.getClickCount() >= 2)
{
current = find(e.getPoint());
one_press = false;
current2 = null;
if (current != null)
{
remove(current);
}
else
{
line = null;
line = find_Line(e.getPoint());
if(line != null)
{
remove_Line(line);
}
}
}
}
public void mouseMoved(MouseEvent e)
{
if(find(e.getPoint()) == null && find_Line(e.getPoint()) == null)
setCursor(Cursor.getDefaultCursor());
else
setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
}
public void paint(Graphics g)
{
super.paintComponents(g);
Graphics2D g2 = (Graphics2D) g;
for(int i = 0; i < circle.size(); i++)
{
g2.setColor(new Color(10, 170 , 133));
g2.draw((Ellipse2D) circle.get(i));
g2.setColor(new Color(250 , 110 , 50));
g2.drawString(iterator.get(i).toString() , (float)((Ellipse2D) circle.get(i)).getCenterX() , (float)((Ellipse2D) circle.get(i)).getCenterY());
}
for(int i = 0; i < lines.size(); i++)
{
g2.setColor(new Color(10, 170 , 133));
g2.setStroke(new BasicStroke(5));
g2.draw((Line2D) lines.get(i));
}
}
Добрый день! Хочу удалить нарисованную линию двойным кликом мышки. При навведении на линию, курсор не меняется на крест. Эти линии рисуются между кругами (работа по теории графов). Все линии я храню в ArrayList.
Я находил линию так: смотрел на место клика и проверял вхождение с помощью contains. Я думаю, что лажа именно в contains... Могу скинуть весь код.
Метод Line2D.contains всегда возвращает false, т.к. у отрезка нет площади. Метод присутствует чтобы реализовать контракт с Shape
This method is required to implement the Shape interface, but in the case of Line2D objects it always returns false since a line contains no area.
Вместо этого можно считать расстояние от точки до отрезка с помощью Line2D.ptLineDist. Если расстояние меньше заданной погрешности, считать точку принадлежащей отрезку.
Продвижение своими сайтами как стратегия роста и независимости