Java 绘制圆对象后将其传递给Arraylist

Java 绘制圆对象后将其传递给Arraylist,java,swing,arraylist,Java,Swing,Arraylist,/*您好,我正在开发这个程序,该程序要求我使用PaintComponent方法在Jpanel上绘制圆 到目前为止,我的圆圈出现了,但我需要跟踪它们,所以我决定使用Arraylist添加它们。每次鼠标单击都会出现一个新的圆,但我的Arraylist仅显示当前的圆对象,而不是新单击后的上一个对象。我已经在这里看到了类似的问题,但似乎没有什么对我有效,接下来是我的代码*/ pane_main.add(myCircle,BorderLayout.CENTER); myCi

/*您好,我正在开发这个程序,该程序要求我使用PaintComponent方法在Jpanel上绘制圆

到目前为止,我的圆圈出现了,但我需要跟踪它们,所以我决定使用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 ;
                }
        }
    }
}
pane_main.add(myCircle,BorderLayout.CENTER);
myCircle.addMouseListener(新的MouseAdapter(){
公共无效鼠标按下(MouseEvent e){
xstart=e.getX();
ystart=e.getY();
半径=(int)(Math.random()*100);
frame1.repaint();
}
公共无效MouseEvent(MouseEvent e){
xend=e.getX();
yend=e.getY();
如果(xend
/* H=405,w=584 颜色为:17-96-230 对于圆形对象1: 中心坐标为:(202,94) 半径为:25 H=405,w=584 颜色是:78-137-123 对于圆形对象1: 中心坐标为:(97289) 半径为:5 颜色是:78-137-123 对于圆形对象1: 中心坐标为:(97289) 半径为:5 这是运行它的一个示例输出,第一次圆的半径是25,第二次圆的半径是5,但它显示了两次结果,而不是以前的和当前的结果,任何帮助或指导都将不胜感激,谢谢*/

我已经在这里看过了类似的问题,-那么你怎么会错过这个:昨天刚刚问过的问题?这里的建议也适用于您的代码。你的代码结构是错误的,需要修正。我已经在这里看过了类似的问题,-那么你怎么会错过这个:昨天刚刚问过的问题?这里的建议也适用于您的代码。代码的结构错误,需要修复。