Swing JFC Java

import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Rectangle;
/* SlidePuzzle, originally from VisualJ++ Developer's News, July 1997 */
public class SlidePuzzle extends Applet implements Runnable {
  Thread m_SlidePuzzle = null;
  private Graphics m_Graphics;
  private Image logo;
  private boolean m_fAllLoaded = false;
  private Rectangle squares[];
  private int order[];
  private int x = 1;
  private int y = 0;
  public void init() {
    //Define and populate Rectangle array
    squares = new Rectangle[9];
    squares[0] = new Rectangle(0, 0, 60, 60);
    squares[1] = new Rectangle(0, 60, 60, 60);
    squares[2] = new Rectangle(0, 120, 60, 60);
    squares[3] = new Rectangle(60, 0, 60, 60);
    squares[4] = new Rectangle(60, 60, 60, 60);
    squares[5] = new Rectangle(60, 120, 60, 60);
    squares[6] = new Rectangle(120, 0, 60, 60);
    squares[7] = new Rectangle(120, 60, 60, 60);
    squares[8] = new Rectangle(120, 120, 60, 60);
    //Define and populate int array
    order = new int[9];
    order[0] = 6;
    order[1] = 2;
    order[2] = 8;
    order[3] = 1;
    order[4] = 0;
    order[5] = 7;
    order[6] = 5;
    order[7] = 4;
    order[8] = 3;
  }
  public void paint(Graphics g) {
    if (m_fAllLoaded) {
      Rectangle r = g.getClipRect();
      g.clearRect(r.x, r.y, r.width, r.height);
      g.drawImage(logo, 0, 0, null);
    } else
      g.drawString("Loading images...", 10, 20);
  }
  public void start() {
    if (m_SlidePuzzle == null) {
      m_SlidePuzzle = new Thread(this);
      m_SlidePuzzle.start();
    }
  }
  public void stop() {
    if (m_SlidePuzzle != null) {
      m_SlidePuzzle.stop();
      m_SlidePuzzle = null;
    }
  }
  public void run() {
    if (!m_fAllLoaded) {
      m_Graphics = getGraphics();
      MediaTracker tracker = new MediaTracker(this);
      logo = getImage(getDocumentBase(), "vjlogo.gif");
      tracker.addImage(logo, 0);
      try {
        tracker.waitForAll();
        m_fAllLoaded = !tracker.isErrorAny();
      } catch (InterruptedException e) {
      }
      if (!m_fAllLoaded) {
        stop();
        m_Graphics.drawString("Error loading images!", 10, 40);
        return;
      }
    }
    //Clear the screen and draw first image
    repaint();
    //Move the squares
    while (true) {
      for (x = 1; x < 9; x++) {
        //Slow down the animation
        try {
          Thread.sleep(350);
        } catch (InterruptedException e) {
        }
        //Move square to next location
        m_Graphics.copyArea(squares[order[x]].x, squares[order[x]].y,
            60, 60, squares[order[x - 1]].x - squares[order[x]].x,
            squares[order[x - 1]].y - squares[order[x]].y);
        //Clear most recently copied square
        m_Graphics.clearRect(squares[order[x]].x, squares[order[x]].y,
            60, 60);
      }
      //Repaint original graphic after two cycles
      y++;
      if (y == 2) {
        repaint();
        y = 0;
      }
    }
  }
}