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

求高手帮忙 我是一个初学者
为什么只能下在第二列上啊 其他地方不能下啊
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JOptionPane;


public class FiveChessJFrame extends JFrame implements MouseListener{
int width = Toolkit.getDefaultToolkit().getScreenSize().width;
int height = Toolkit.getDefaultToolkit().getScreenSize().height;
int x = 0;
int y = 0;
int[][] checkwho = new int[19][19];
FiveChessJFrame() {
this.setSize(670, 420);
this.setLocation((width-670)/2, (height-420)/2);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setResizable(false);
this.addMouseListener(this);
this.setVisible(true);

}
public void paint(Graphics g){
BufferedImage bgimage = null;
try {
bgimage = ImageIO.read(new File("E:/java/workspace/fivechess/image/wuziqipan.jpg"));
}
catch (IOException e){
e.printStackTrace();
}
g.drawImage(bgimage, 0, 0, this);
g.setColor(new Color(245,222,179));
g.fillRect(190, 110, 288, 288);
g.setColor(Color.black);
for(int i = 0;i <= 18;i++) {
g.drawLine(190, 110+16*i,478,110+16*i);
g.drawLine(190+16*i, 110, 190+16*i, 398);
}
for(int i = 1; i <= 19 ; i++){
for(int j = 1; j <= 19; j++) {
int tempx;
int tempy;
if (checkwho[i][j] == 1) {
tempx = i*16+190;
tempy = j*16+110;
//JOptionPane.showMessageDialog(this, "tempx:"+tempx+"tempy:"+tempy+"checkwho[i][j]:"+checkwho[i][j]);
g.setColor(Color.black);
g.fillOval(tempx-8, tempy-8, 16, 16);
}
if (checkwho[i][j] == 2) {
tempx = i*16+190;
tempy = j*16+110;
g.setColor(Color.black);
g.drawOval(tempx-8, tempy-8, 16, 16);
g.setColor(Color.white);
g.fillOval(tempx-8, tempy-8, 16, 16);
}
  }
}
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub

}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
//System.out.println("x = "+e.getX());
//System.out.println("y = "+e.getY());
x = e.getX();
y = e.getY();

if (x>=190 && x<=478 && y>=110 && y<=398) {
//JOptionPane.showMessageDialog(this, "鼠标在棋盘范围内!");
int i;
int j;
i = (x-190)/16;
j = (y-110)/16;
checkwho[i][j] = 1;
//JOptionPane.showMessageDialog(this, "x:"+i+"y:"+j+"checkwho[x][y]:"+checkwho[i][j]);
this.repaint();
}
}
@Override
public void mouseReleased(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

}
}
//主类
public class FiveChess {
public static void main(String[] args) {
FiveChessJFrame ff = new FiveChessJFrame();
}
}


------解决方案--------------------
int[][] checkwho = new int[19][19];


for(int i = 1; i <= 19 ; i++){
for(int j = 1; j <= 19; j++) {
int tempx;
int tempy;
if (checkwho[i][j] == 1) {

当你循环取到checkwho[1][19]的时候就数组溢出了。。。

根据业务更改数组的length或者循环的size。。。