title: How to Draw an BufferedImage to a JPanel
body: <p>I am trying to use some sort of draw method to draw a sprite image to my subclass of JPanel called AnimationPanel. I have created a Spritesheet class which can generate a BufferedImage[] that contains all of the sprites in the sheet. In my AnimationPanel class, which implements Runnable, I am getting that BufferedImage[] from the spritesheet instantiated in the AnimationPanel constructor.  I want to be able to loop through this array and display each sprite to the screen. How would I do this? Here are my AnimationPanel and Spritesheet classes.</p>
  
  <h2><code>AnimationPanel</code></h2>
  
  <pre><code>package com.kahl.animation;
  
  import javax.swing.JPanel;
  
  public class AnimationPanel extends JPanel implements Runnable {
  
  //Instance Variables
  private Spritesheet sheet;
  private int currentFrame;
  private Thread animationThread;
  private BufferedImage image;
  
  public AnimationPanel(Spritesheet aSheet) {
      super();
      sheet = aSheet;
      setPreferredSize(new Dimension(128,128));
      setFocusable(true);
      requestFocus();
  
  }
  
  public void run() {
      BufferedImage[] frames = sheet.getAllSprites();
      currentFrame = 0;
      while (true) {
          frames[currentFrame].draw(); //some implementation still necessary here
          currentFrame++;
          if (currentFrame &gt;= frames.length) {
              currentFrame = 0;
          }
      }
  }
  
  public void addNotify() {
      super.addNotify();
      if (animationThread == null) {
          animationThread = new Thread(this);
          animationThread.start();
      }
  }
  
  }
  </code></pre>
  
  <h2><code>Spritesheet</code></h2>
  
  <pre><code>package com.kahl.animation;
  
  import java.awt.image.BufferedImage;
  import java.imageio.ImageIO;
  import java.io.IOException;
  import java.io.File;
  
  public class Spritesheet {
  
  //Instance Variables
  private String path;
  private int frameWidth;
  private int frameHeight;
  private int framesPerRow;
  private int frames;
  private BufferedImage sheet = null;
  
  //Constructors
  public Spritesheet(String aPath,int width,int height,int fpr, int numOfFrames) {
  
      path = aPath;
      frameWidth = width;
      frameHeight = height;
      framesPerRow = fpr;
      frames = numOfFrames;
  
      try {
          sheet = ImageIO.read(getClass().getResourceAsStream());
      } catch (IOException e) {
          e.printStackTrace();
      }
  
  }
  
  //Methods
  
  public int getHeight() {
      return frameWidth;
  }
  
  public int getWidth() {
      return frameWidth;
  }
  
  public int getFramesPerRow() {
      return framesPerRow;
  }
  
  private BufferedImage getSprite(int x, int y, int h, int w) {
      BufferedImage sprite = sheet.getSubimage(x,y,h,w);
  }
  
  public BufferedImage[] getAllSprites() {
      BufferedImage[] sprites = new BufferedImage[frames];
      int y = 0;
      for (int i = 0; i &lt; frames; i++) {
          x = i * frameWidth;
          currentSprite = sheet.getSprite(x,y,frameHeight,frameWidth);
          sprites.add(currentSprite);
      }
      return sprites;
  
  }
  
  }
  </code></pre>