title: Does invoking the drawRect method on a Graphics2D trigger the paintComponent method?
body: <p>I'm trying to figure out the behavior of my program, and that is my best theory as to why its doing what its doing. I was hoping this would use the <code>rand</code> variable to decide which shape to paint, but instead it seems the <code>paintComponent</code> method is being invoked many times in-between timer firings, causing many shapes to be painted and I'm trying to understand why.</p>
  
  <p>This is the code:</p>
  
  <pre><code>public class TestPane extends JPanel {
  
      private int yPos0;
      private int yPos1;
      private int boundary0=750;
      private ActionEvent ae = null;
      private Graphics g0 = null;
      private int count=1;
  
      public TestPane(Color foreground){
          setForeground(foreground);
          this.setBackground(Color.BLUE);
          Timer timer = new Timer(3000,new ActionListener(){
              @Override
              public void actionPerformed(ActionEvent e){
                  ae = e;
                   yPos0 =yPos0+50;
                      repaint();
              }
          });
          timer.start();
      }
  
      @Override
      public void paintComponent(Graphics g){
               g0 = g;
               super.paintComponent(g);
               createShape(yPos0);
               repaint(); 
      }
  
      public void createShape(int ypos0){
          //generate random number between 1 and 3 and assign to rand
          int rand = (int)((Math.random()*3)+1);
  
          System.out.println(rand);
          if(rand==1){
              Graphics2D g2d = (Graphics2D) g0.create();
              g2d.setColor(Color.RED);
              g2d.drawRect(0, ypos0, 200, 50);
          }
  
          if(rand==2){
              Graphics2D g2d = (Graphics2D) g0.create();
              g2d.setColor(Color.GREEN);
              g2d.drawRect(0, ypos0, 150, 50);
              g2d.drawRect(50, ypos0+50,50,50);
          }
      }
  }
  </code></pre>