/ * Здравствуйте, я работаю над этой программой, которая требует рисования кругов на Jpanel с помощью метода PaintComponent.
Пока что мои круги появляются, но мне нужно следить за ними, поэтому я решил использовать Arraylist для их добавления.С каждым щелчком мыши появляется новый круг, но мой Arraylist показывает мне только текущий объект круга, а не предыдущий объект после нового щелчка.Я уже рассматривал подобные вопросы здесь, но мне кажется, что ничего не работает, следующий мой код пока что * /
pane_main.add(myCircle,BorderLayout.CENTER);
myCircle.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e){
xstart= e.getX();
ystart = e.getY();
radius = (int) (Math.random()*100);
frame1.repaint();
}
public void mouseReleased(MouseEvent e){
xend = e.getX();
yend = e.getY();
if (xend < xstart) { int tmp = xstart; xstart = xend; xend = tmp; }
if (yend < ystart) { int tmp = ystart; ystart = yend; yend = tmp; }
Circle cr = new Circle(xcenter,ycenter,radius);
circleList.add(cr);//adding to list
}
});
myCircle.addMouseMotionListener(new MouseMotionAdapter(){
public void mouseMoved(MouseEvent e){
if (Trackmouse){
int x = e.getX();
int y = e.getY();
printMsg("(" + x + ", " + y + ")");
}
}
});
frame1.setVisible(true);
}
//the class that has paint component
public class Circle extends JPanel {
public Circle(){
}
public Circle(int x,int y,int radius){
}
public int getCenterX(){
return xstart - radius;
}
public int getCenterY(){
return ystart - radius;
}
public int getRadius(){
return radius;
}
public void paintComponent(Graphics g) {
int red = (int)(256*Math.random());
int green = (int)(256*Math.random());
int blue = (int)(256*Math.random());
int width = this.getWidth();
int height = this.getHeight();
printMsg("H = " + height + ", w = " + width);
for (Circle circle: circleList){
int count = 1;
g.setColor(new Color(red, green, blue));
printMsg("Colors are: " + red + " - " + green + " - " + blue );
g.fillOval(getCenterX(),getCenterY(),getRadius() *2,getRadius() *2);
System.out.println("For circle object " + count + ": ");
System.out.println("Center coordinates are: (" + circle.getCenterX() + " ," + circle.getCenterY()+ " )");
System.out.println("Radius is: " + circle.getRadius());
++ count ;
}
}
}
}
/ * H = 405, w = 584 Цвета: 17 -96 - 230 Для объекта круга 1: координаты центра: (202, 94) Радиус: 25 H = 405, w = 584 Цвета: 78 - 137 - 123 Для объекта круга 1: координаты центра: (97, 289)Радиус: 5 Цвета: 78 - 137 - 123 Для объекта круга 1: Координаты центра: (97, 289) Радиус: 5 Вот пример выходных данных при его запуске, в первый раз радиус круга был 25,во второй раз радиус равен 5, но он отображает этот результат дважды вместо предыдущего и текущего, любая помощь или руководство будет принята с благодарностью, спасибо!* /