代码如下:
chess类
package chess;import java.awt.Point;/**
* 棋子类,用来保存棋子的信息,包括棋子的位置(Point p),棋子的颜色(flag,1为白,0为黑)
* @author dzr
*
*/
public class Chess
{
Point p;
int flag = 0;
/**
* 默认构造函数
*/
public Chess()
{
p = new Point();
}
/**
* 根据棋子的坐标构造棋子
* @param p 棋子坐标
*/
public Chess(Point p)
{
this.p = p;
}
public Chess(Point p,int flag)
{
this.p = p;
this.flag = flag;
}
}
棋盘类:
package chess;import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Ellipse2D;import javax.swing.JFrame;
public class ChessBoard extends JFrame
{
/**
*
*/
Chess chess;
private static final long serialVersionUID = 1L;
final int len = 30; //棋盘之间的间隔
public ChessBoard()
{
chess = new Chess();
this.setTitle("五子棋");
this.setResizable(false);
this.setSize(600, 600);
int screenX = Toolkit.getDefaultToolkit().getScreenSize().width;
int screenY = Toolkit.getDefaultToolkit().getScreenSize().height;
this.setLocation(screenX/2-300,screenY/2-300);
//设置背景颜色
Container container = this.getContentPane();
container.setBackground(Color.yellow);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true); this.addMouseListener(new MyMouseClick());
}
/**
* 鼠标点击事件响应类
* @author dzr
*
*/
final class MyMouseClick extends MouseAdapter
{
public void mouseClicked(MouseEvent e)
{
System.out.println(e.getPoint().toString());
chess.p = new Point();
chess.p = e.getPoint();
chess.flag= 1;
repaint();
}
}
/**
* ?????????????????????????
*/
public void paint(Graphics g)
{
super.paint(g);
Graphics2D g2 = (Graphics2D)g;
BasicStroke pen = new BasicStroke(3.0f);
g2.setStroke(pen);
g2.setColor(Color.BLUE);
//在 4*4,4*11,11*4,11*11,8*8的位置画圆点
//圆的直径为8
Ellipse2D.Float circle1 = new Ellipse2D.Float(
70+3*30-4,110+3*30-4,8,8);
Ellipse2D.Float circle2 = new Ellipse2D.Float(
70+3*30-4,110+11*30-4,8,8);
Ellipse2D.Float circle3 = new Ellipse2D.Float(
70+11*30-4,110+3*30-4,8,8);
Ellipse2D.Float circle4 = new Ellipse2D.Float(
70+11*30-4,110+11*30-4,8,8);
Ellipse2D.Float circle5 = new Ellipse2D.Float(
70+7*30-4,110+7*30-4,8,8);
for(int i=0;i<15;i++)
{
//横线,从(70,110)->(490,110)
//之后横坐标保持不变,纵坐标依次增加30
g2.drawLine(70, 110+i*len , 490, 110+i*len);
//竖线 从(70,110)->(70,530)
//之后纵坐标保持不变,横坐标一次增加30
g2.drawLine(70+i*len, 110, 70+i*len, 530);
}
g2.draw(circle1);
g2.draw(circle2);
g2.draw(circle3);
g2.draw(circle4);
g2.draw(circle5);
//绘制序列号
Font font = new Font("Dialog",Font.BOLD,16);
g2.setFont(font);
g2.setColor(Color.red);
for(int i=0;i<15;i++)
{
if(i<9)
g2.drawString(""+(i+1), 46, 110+8+i*len);
else
g2.drawString(""+(i+1), 42, 110+8+i*len);
}
char ch = 'a';
for(int i=0;i<15;i++)
{
g2.drawString(""+(char)(ch+i), 66+i*len, 102);
}
//绘制棋子,我们通过一个方法来实现,
//该方法获取一个棋子类的信息,然后在棋盘上进行棋子绘制
//由于绘制需要graphic2D这个类,所以还是在这个方法里绘制好点
g2.drawOval(chess.p.x,chess.p.y, len, len);
}
public static void main(String[] args)
{
new ChessBoard();
}
}
wenti :
每次点击之后,棋盘都会出现明显的闪一下。
能够用肉眼明显的观察出这个重绘的过程。
chess类
package chess;import java.awt.Point;/**
* 棋子类,用来保存棋子的信息,包括棋子的位置(Point p),棋子的颜色(flag,1为白,0为黑)
* @author dzr
*
*/
public class Chess
{
Point p;
int flag = 0;
/**
* 默认构造函数
*/
public Chess()
{
p = new Point();
}
/**
* 根据棋子的坐标构造棋子
* @param p 棋子坐标
*/
public Chess(Point p)
{
this.p = p;
}
public Chess(Point p,int flag)
{
this.p = p;
this.flag = flag;
}
}
棋盘类:
package chess;import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Ellipse2D;import javax.swing.JFrame;
public class ChessBoard extends JFrame
{
/**
*
*/
Chess chess;
private static final long serialVersionUID = 1L;
final int len = 30; //棋盘之间的间隔
public ChessBoard()
{
chess = new Chess();
this.setTitle("五子棋");
this.setResizable(false);
this.setSize(600, 600);
int screenX = Toolkit.getDefaultToolkit().getScreenSize().width;
int screenY = Toolkit.getDefaultToolkit().getScreenSize().height;
this.setLocation(screenX/2-300,screenY/2-300);
//设置背景颜色
Container container = this.getContentPane();
container.setBackground(Color.yellow);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true); this.addMouseListener(new MyMouseClick());
}
/**
* 鼠标点击事件响应类
* @author dzr
*
*/
final class MyMouseClick extends MouseAdapter
{
public void mouseClicked(MouseEvent e)
{
System.out.println(e.getPoint().toString());
chess.p = new Point();
chess.p = e.getPoint();
chess.flag= 1;
repaint();
}
}
/**
* ?????????????????????????
*/
public void paint(Graphics g)
{
super.paint(g);
Graphics2D g2 = (Graphics2D)g;
BasicStroke pen = new BasicStroke(3.0f);
g2.setStroke(pen);
g2.setColor(Color.BLUE);
//在 4*4,4*11,11*4,11*11,8*8的位置画圆点
//圆的直径为8
Ellipse2D.Float circle1 = new Ellipse2D.Float(
70+3*30-4,110+3*30-4,8,8);
Ellipse2D.Float circle2 = new Ellipse2D.Float(
70+3*30-4,110+11*30-4,8,8);
Ellipse2D.Float circle3 = new Ellipse2D.Float(
70+11*30-4,110+3*30-4,8,8);
Ellipse2D.Float circle4 = new Ellipse2D.Float(
70+11*30-4,110+11*30-4,8,8);
Ellipse2D.Float circle5 = new Ellipse2D.Float(
70+7*30-4,110+7*30-4,8,8);
for(int i=0;i<15;i++)
{
//横线,从(70,110)->(490,110)
//之后横坐标保持不变,纵坐标依次增加30
g2.drawLine(70, 110+i*len , 490, 110+i*len);
//竖线 从(70,110)->(70,530)
//之后纵坐标保持不变,横坐标一次增加30
g2.drawLine(70+i*len, 110, 70+i*len, 530);
}
g2.draw(circle1);
g2.draw(circle2);
g2.draw(circle3);
g2.draw(circle4);
g2.draw(circle5);
//绘制序列号
Font font = new Font("Dialog",Font.BOLD,16);
g2.setFont(font);
g2.setColor(Color.red);
for(int i=0;i<15;i++)
{
if(i<9)
g2.drawString(""+(i+1), 46, 110+8+i*len);
else
g2.drawString(""+(i+1), 42, 110+8+i*len);
}
char ch = 'a';
for(int i=0;i<15;i++)
{
g2.drawString(""+(char)(ch+i), 66+i*len, 102);
}
//绘制棋子,我们通过一个方法来实现,
//该方法获取一个棋子类的信息,然后在棋盘上进行棋子绘制
//由于绘制需要graphic2D这个类,所以还是在这个方法里绘制好点
g2.drawOval(chess.p.x,chess.p.y, len, len);
}
public static void main(String[] args)
{
new ChessBoard();
}
}
wenti :
每次点击之后,棋盘都会出现明显的闪一下。
能够用肉眼明显的观察出这个重绘的过程。
解决方案 »
- dhtmlxTree 中tree的数据只能从XML文件获取吗?
- SSH的表连接的查询,怎么做啊??????很急很急啊!
- 关于反射后的类型转换。有高手吗?难道没人能搞定?
- 急求Struts2 中tabbedPanel的使用方式
- 政府门户网站的安全性架构设置
- 怎样学习sructs比较快
- ejb:用contian管理的entity bean如何实现多条记录删除????有ejb高手吗????
- jsp无法显示struts2从数据库取得的数据
- spring batch + spring boot 的jobParameters传入
- 关于实现代理请求的问题
- hibernate已经写好了实体类和配置文件,怎么生成数据表
- Spring Repository 条件查询问题怎么实现
然后添加到JFrame里。