Na JPanelu rysuję sobie linie przy pomocy metody:
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
for (UserDrawnLine line : userDrawnLines) {
g.setColor(new Color(line.colorRValue,line.colorGValue, line.colorBValue));
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setStroke(new BasicStroke(line.thickness));
g.drawLine(line.startPointX, line.startPointY, line.endPointX, line.endPointY);
}
}
Klasa linii:
public class UserDrawnLine {
public int startPointX;
public int startPointY;
public int endPointX;
public int endPointY;
public int colorRValue;
public int colorGValue;
public int colorBValue;
public float thickness;
public UserDrawnLine(int startPointX, int startPointY, int endPointX, int endPointY, int colorRValue,int colorGValue,int colorBValue, float thickness) {
this.startPointX = startPointX;
this.startPointY = startPointY;
this.endPointX = endPointX;
this.endPointY = endPointY;
this.colorRValue=colorRValue;
this.colorBValue=colorBValue;
this.colorGValue=colorGValue;
this.thickness=thickness;
}
}
Chciałbym teraz umożliwić użytkownikowi klikanie prawym przyciskiem myszy na te linie i wywoływanie pewnych akcji. Niestety, linia nie jest komponentem i nie za bardzo wiem jak ugryźć temat. Myślałem o zapisywaniu punktów na których leży dana linia i po kliknięciu na JPanelu sprawdzaniu czy trafiłem w punkt na którym leży linia, ale to rozwiązanie wydaje się nienajlepsze. Macie może jakieś pomysły?