Передача объектов круга Arraylist после их рисования - PullRequest
1 голос
/ 20 сентября 2019

/ * Здравствуйте, я работаю над этой программой, которая требует рисования кругов на 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, но он отображает этот результат дважды вместо предыдущего и текущего, любая помощь или руководство будет принята с благодарностью, спасибо!* /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...