在纵横线的交点处画棋子
见标题,这是一个数学题了,不过能够做出来还蛮有成就感的了!
paint()方法和paintComponent()方法的区别
一般来说当你想在AWT组件上进行绘制时,你可以重新实现paint函数,像我们在Applet Canvas上绘制需要实现paint函数
如果想在Swing组件上进行绘制,我们往往重新实现paintComponent方法(这个方法AWT组件没有),在需要刷新的时候系统会调用paint函数
paint函数内部又调用paintComponent函数(paint内部一共会调三个,还有一个负责边框绘制)
首先是画棋盘了
/**
* 在这个面板上画一个五子棋的棋盘了
*/
public void paintComponent(Graphics g) {
//先画横线
for(int i = 40;i <= 400;i += 20) {
g.drawLine(40, i, 400, i);
}
//划竖线
for(int j = 40;j <= 400;j += 20) {
g.drawLine(j, 40, j, 400);
}
//再划棋盘上的五个特殊点
g.fillRect(97, 97, 6, 6);
g.fillRect(337,97,6,6);
g.fillRect(97, 337, 6, 6);
g.fillRect(337, 337, 6, 6); 这些数字都是要算出来的,可以找一些好计算的面板尺寸了
g.fillRect(217, 217, 6, 6);
}
将黑白棋子写成两个内部类饿了,得填充一个椭圆,看上去就像一个棋子一样了e
/**
* 白棋子内部类
* @author sornor
* @version 1.0
*/
class Chess_white extends Canvas{
public Chess_white () {
this.setSize(20,20);
}
public void paint(Graphics g) {
g.setColor(Color.white);
System.out.println("white");
g.fillOval(0, 0, 14, 14); //填充一个椭圆了
}
}
正式画棋子了
boolean isWin = this.checkWin(a, b);
if(!isWin) {
if(count % 2 == 1) { //画黑棋子
black = new Chess_black();
this.add(black);
black.setBounds(a * 20 - 7, b * 20 -7,16,16);
//主要是这个setBounds 函数了
chessBlack_x[blackCount] = a;
chessBlack_y[blackCount] = b; //将坐标存储到数组中
blackCount ++;
chessColor ++;
count++;
}
else { //画白棋子了e
white = new Chess_white();
this.add(white);
white.setBounds(a * 20 - 7, b * 20 -7,16,16);
chessWhite_x[blackCount] = a;
chessWhite_y[blackCount] = b;
whiteCount++;
chessColor ++;
count++;
}
}
else
System.out.println("结果已经出来了");
}
2011-05-29 16:24:15