日期:2014-05-20  浏览次数:20800 次

五子棋不能显示背景图片?
(为什么不能显示背景图片?)

代码如下:
public class GamePanel extends JPanel implements MouseListener {
private final int GAMEWIDTH = 500;
private final int GAMEHEIGHT = 500;
// 记录用户点击的坐标
private int x = 0;
private int y = 0;
// 定义数组,保存所有棋子
int[][] allChess = new int[19][19];

// 判断棋子是否为可见 0:不可见 1:可见
// 定义下一步什么(黑或白)子 true:黑子 false:白子
boolean isBack = true;

public GamePanel() {

// 注册监听
this.addMouseListener(this);
int width = Toolkit.getDefaultToolkit().getScreenSize().width;
int height = Toolkit.getDefaultToolkit().getScreenSize().height;
this.setBounds((width - GAMEWIDTH) / 2, (height - GAMEHEIGHT) / 2,
GAMEWIDTH, GAMEHEIGHT);

this.setVisible(true);
}

// 重写paint()方法
public void paint(Graphics g) {
super.paint(g);

//绘制出背景图片
Image backGound =null;
try {
backGound=new ImageIcon("D:/images/myChess.jpg").getImage();
} catch (Exception e) {
e.printStackTrace();
}
g.drawImage(backGound, 10, 10, this);
// 绘制棋盘
for (int i = 0; i < 19; i++) {
g.drawLine(10, i * 20 + 70, 370, i * 20 + 70);
g.drawLine(i * 20 + 10, 70, i * 20 + 10, 430);
}

// 绘制所有用户点过的圆
for (int i = 0; i < 19; i++) {
for (int j = 0; j < 19; j++) {
// 绘制用户点击的坐标上画圆
// 把可见的圆,把数组中的x,y值转换成像素点
int tempx = 0;
int tempy = 0;
if (allChess[i][j] == 1) {
// 黑子
tempx = i * 20 + 10;
tempy = j * 20 + 70;
if (tempx >= 10 && tempx <= 370 && tempy >= 70
&& tempy <= 430) {
// 绘制相应颜色的棋子

g.setColor(Color.white);
g.drawOval(tempx - 7, tempy - 7, 14, 14);
g.setColor(Color.black);
g.fillOval(tempx - 7, tempy - 7, 14, 14);

}
} else if (allChess[i][j] == 2) {
// 白子
tempx = i * 20 + 10;
tempy = j * 20 + 70;

g.drawOval(tempx - 7, tempy - 7, 14, 14);
g.setColor(Color.white);
g.fillOval(tempx - 7, tempy - 7, 14, 14);

}

}
}
}

@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
x = e.getX();
y = e.getY();
System.out.println("x:" + x);
System.out.println("y:" + y);
// 判断用户点击的点在棋盘内
if (x >= 10 && x <= 370 && y >= 70 && y <= 430) {
// 转换下子的颜色
x = (x - 10) / 20;
y = (y - 70) / 20;

if (isBack) {
// 黑子
allChess[x][y] = 1;
isBack = false;
} else {
allChess[x][y] = 2;
isBack = true;
}


// 重画界面
this.repaint();
}
}

------解决方案--------------------
我试了一下,可能是路径问题。
ImageIcon好像对工程外的文件读取不能很好的支持,但是在工程内的图片就能正常读取,无论是用绝对路径还是相对路径。
建议你把图片放在工程的同一个包下面,并用相对路径读取。
希望能对你有用