在paint()中调用repaint()会导致无限递归吗?

Sou*_*abh 3 java graphics swing

我一直在开发一个与图形相关的java应用程序.根据我的理解,每次在代码中的任何地方使用repaint()方法时,都会调用重写的paintComponent.但我也在paintComponent本身中使用了repaint().为什么它不会导致无限递归?代码工作正常.

              panel = new JPanel(){
        public void paintComponent(Graphics g)
        {

            {

                panel.revalidate();
                panel.repaint();
                c.revalidate();
                c.repaint();
                revalidate();
                repaint();
                for(int i=0;i<linecount-1;i+=2)
                {
                    Line2D line = new Line2D.Double(xco[i],yco[i],xco[i+1],yco[i+1]);
                    Graphics2D g2d = (Graphics2D) g;
                    if(divide[i]==1)
                    {

                    //System.out.print(xco[i]+" "+yco[i]);
                    //System.out.println();

                     g2d.setStroke(drawingStroke);
                     g2d.draw(line);
                     g2d.setStroke(simple);
                    }
                    else
                    {
                        g2d.setStroke(simple);
                        g2d.draw(line);
                    }
                    //g.drawLine(xco[i],yco[i],xco[i+1],yco[i+1]);
                }

                //g.drawLine(x1,y1,x2,y2);
                panel.revalidate();
                panel.repaint();
                c.revalidate();
                c.repaint();
                revalidate();
                repaint();
            }
        }
    };
Run Code Online (Sandbox Code Playgroud)

}

Rob*_*een 5

它不会导致无限递归- Java堆栈上-因为重绘仅仅安排一个新的油漆工作要做,它实际上并没有打电话paintpaintComponent直接.

但是,这样做仍然是一个坏主意.