大家看看下面的程序段,在把图片的初始状态设随机的那一段;为什么在jbuilder x中编译只有第一张小图,而且界面上的9个位置全是第一张小图?(如果改成固定的初始状态又是可以正常运行的)而且该程序在jbuilder x中编译运行之后的界面很窄,下面的拼图都被遮到了,怎么样可以把显示的界面改大?谢谢了
package pintu;import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.awt.event.MouseEvent;
import java.awt.event.KeyEvent;
import java.net.URL;
import java.lang.Math;public class Pintu
    extends Applet
    implements MouseListener, KeyListener, Runnable {
  final int IMAGE_WIDTH = 120;
//每张拼图的宽
  final int IMAGE_HEIGHT = 120;
//每张拼图的高
  Image[] m_Image = new Image[9];
//总的大图片
  Image m_ImgAll;
//9个用来装入每个拼图的图片对象
  final int DELTAX = 80;
//标志提示信息区的宽度
  int m_nImageNo[][] = new int[3][3];
//标志现在各个拼图的排列情况
  final int NO_IMAGE = -1;
//此位置没有拼图
  int nStep = 0;
  //已经走的步数
  int nTime = 0;
  //已经玩过的时间,以秒为单  final int DIRECTION_UP = 1;
//代表移动方向为向上
  final int DIRECTION_DOWN = 2;
//代表移动方向为向下
  final int DIRECTION_LEFT = 3;
//代表移动方向为向左
  final int DIRECTION_RIGHT = 4;
//代表移动方向为向右
  final int DIRECTION_NONE = -1;
//代表不能移动  boolean bWantStartNewGame = false;  boolean bOnShowAll = false;
//预览的开关
  AudioClip m_audioClip1, m_audioClip2;  int m_nNumOfImg = 0;
//拼图底图所使用的图片的个数  String m_sImgName[] = new String[9];
//记录拼图底图的名字  int nScore;
  //int nTime=0;
//已经玩过的时间,以秒为单位
  Thread thTimer;
//计时器线程 public void initData() {
    for (int i=0;i<9;i++)
      nHasDistrib[i] = 0;
     for (int j = 0; j < 3; j++) {
       for (int i = 0; i < 3; i++) {
         int nCount=j*3+i;
         int nImgNo = -1;
         do {
           nImgNo = (int) (Math.random() * 9);
           }
         while (nHasDistrib[nImgNo] == 1);
         m_nImageNo[i][j] = nImgNo;
         nHasDistrib[nImgNo] = 1;
         System.out.println("test..");       }
     }
    m_nImageNo[(int)(Math.random()*3)][(int)(Math.random()*3)]= NO_IMAGE;
    nStep=0;
  }  //Construct the applet
  public Pintu() {
  }  //Initialize the applet
  public void init() {
    try {
      jbInit();      m_audioClip1 = getAudioClip(getCodeBase(), "au/move.au");
      m_audioClip2 = getAudioClip(getCodeBase(), "au/notmove.au");      MediaTracker mediaTracker = new MediaTracker(this);
      //建立一个监视器
      m_ImgAll = getImage(getDocumentBase(), "img/pintu.jpg");
      //装载总的大图片
      mediaTracker.addImage(m_ImgAll, 1);
      try {
        mediaTracker.waitForAll();
      }
      catch (Exception e) {
        System.out.println("图片装载出错");
      }
      for (int i = 0; i < 9; i++) {
        //遍历9个小拼图对象,用来装载其中的每个。
        m_Image[i] = getImage(getDocumentBase(), "img/" + i + ".jpg");
        /*m_Image[i] = createImage(IMAGE_WIDTH, IMAGE_HEIGHT);
                 //创建实例,也就是为每个图片对象分配内存空间
                 Graphics g = m_Image[i].getGraphics();
                 //获得Graphics对象
                 int nRow = i % 3;
                 int nCol = i / 3;
                 //算出这个小图片对象应对应总图的那一块区域
                 g.drawImage(m_ImgAll, 0, 0, IMAGE_WIDTH, IMAGE_HEIGHT,
                    nRow * IMAGE_WIDTH, nCol * IMAGE_HEIGHT,
                    (nRow + 1) * IMAGE_WIDTH, (nCol + 1) * IMAGE_HEIGHT,
                    this);
                 //往小拼图上画*/
        mediaTracker.addImage(m_Image[i], 1);
        try {
          mediaTracker.waitForAll();
        }
        catch (Exception e) {
          System.out.println("图片装载出错");
        }
        //m_Image[0]      }
      thTimer = new Thread(this);
//为线程分配内存空间
      thTimer.start();
//开始线程      initData();    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }  //Component initialization
  private void jbInit() throws Exception {
    addMouseListener(this);
    addKeyListener(this);
  }  public void paint(Graphics g) {
    //g.drawImage(m_Image[0],0,0,this);
    //g.drawImage(m_ImgAll,0,0,this);
    g.setColor(Color.white);
    //将当前颜色置为白色
    g.fillRect(0, 0, DELTAX, IMAGE_HEIGHT * 3);
    //填充左边的提示信息区域
    g.setFont(new Font("宋体", Font.PLAIN, 12));
    //设置字体
    g.setColor(Color.blue);
    //设置颜色
    g.drawString("步数:" + nStep, 10, 20);
    //在坐标(10,20)画出字符串,来显示现在走了多少步
    //g.setColor(Color.white);    //所加的代码如下
    g.drawString("现有图片"+m_nNumOfImg+"张",5,60);
        g.drawString("请按1-"+m_nNumOfImg+"键改变图片",5,100);
        g.setColor(Color.white);
    //加入代码
    if (bOnShowAll) {
      int x = DELTAX;
      int y = 0;
      g.drawImage(m_ImgAll, x, y, this);
      //在拼图区画出整幅图片
      return;
    }    for (int i = 0; i < 3; i++) {
      for (int j = 0; j < 3; j++) {
        int x = i * IMAGE_WIDTH + DELTAX;
        int y = j * IMAGE_HEIGHT;
        //计算要画得拼图的区域
        if (m_nImageNo[i][j] == NO_IMAGE) {
          //用空白来填充
          g.fill3DRect(x, y, IMAGE_WIDTH, IMAGE_HEIGHT, true);
        }
        else {
          g.drawImage(m_Image[m_nImageNo[i][j]], x, y, this);
          g.drawRect(x, y, IMAGE_WIDTH, IMAGE_HEIGHT);
        }
      }
    }