大家看看下面的程序段,在把图片的初始状态设随机的那一段;为什么在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);
}
}
}
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);
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货