У меня есть быстрый вопрос к вам, ребята, ну, быстрый для вас, не быстрый для меня.
У меня есть массив, который заполнен формами Arc2D, и у меня есть MouseAdapter
В событии mousePressed мне нужно сравнить Arc2D, на который нажали, с массивом Arc2D или, что еще лучше, автоматически определить, на каком клике был Arc2D, и затем иметь возможность работать с ним (изменить цвет, более конкретно)
Я попробовал это
private class MyMouseAdapter extends MouseAdapter {
public void mousePressed(MouseEvent e) {
Point p = e.getPoint();
Component c = gamePanel.getComponentAt(p);
if(c == arcs[0]) {
System.out.println("test");
}
}
}
, конечно, это не работает, но я, честно говоря, понятия не имею, что делать
большое спасибо заранее!
РЕДАКТИРОВАТЬ:
Посмотрев на первый ответ, который я получил здесь, я попытался изменить код на этот
private class MyMouseAdapter extends MouseAdapter {
public void mousePressed(MouseEvent e) {
Point p = e.getPoint();
if(arcs[0].contains(p)) {
System.out.println("test");
}
}
}
Конечно, это не сработает, потому что массив arcs содержит только дуги, которыепозже нарисованы в этом методе
@Override
protected void paintComponent(Graphics graph) {
super.paintComponent(graph);
Graphics2D g = (Graphics2D) graph;
// smooth graphics
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
// moving to the middle of the panel
g.translate(this.getWidth()/2, this.getHeight()/2);
// painting colored arcs
for(int i = 0; i < 4; i++) {
g.setColor(dimColors[i]);
g.fill(arcs[i]);
}
// painting borders
g.setColor(Color.BLACK);
g.setStroke(new BasicStroke(5F));
g.drawLine(-98, 0, 98, 0);
g.drawLine(0, -98, 0, 98);
g.draw(circle);
// painting central white circle
g.setColor(Color.WHITE);
g.fill(smallCircle);
g.setColor(Color.BLACK);
g.draw(smallCircle);
}
Я полностью застрял, ребята