先来看看效果
总体介绍
主要有界面、绘图、鼠标监听器三部分构成。
1.界面中构建窗体,作为棋盘的主要载体。
2.绘图,利用画笔画出棋盘,棋子(黑白色的圆形图案)。
3.鼠标监听器,利用鼠标点击功能与界面画笔实现链接。
具体过程
1.创建接口GobangCinfig1,备用
public interface GobangConfig1 {
//配置值 X和Y为左上角七点坐标,SIZE为间隔,C为横向间隔数,R为纵向间隔数
int X=50;
int Y=50;
int SIZE=50;
int C=15;
int R=15;
}
2.创建界面UIZ
1.创建界面组合类,在界面组合类中声明方法、创建主函数并调用方法
import javax.swing.*;
import java.awt.*;
//此处不再用 JFrame jf=new JFrame(); 直接用继承 extends JFrame implements GobangConfig1
public class UIZ extends JFrame implements GobangConfig1{
public void initGobangUIZ() {
this.setTitle("五子棋-NO.1");
this.setSize(850, 850);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
this.setVisible(true);
}
//创建主函数,并调用方法
public static void main(String[] args) {
new UIZ().initGobangUIZ();
}
}
3.画图,开始画棋盘
先在窗体左上角画两条垂直的直线,不要超出窗体数值
//创建画笔对象
//Graphics-画笔
Graphics g = this.getGraphics();
//声明画笔
public void paint(Graphics g){
super.paint(g);
//画两条垂直的线
//横线,纵坐标不变。起点坐标,终点坐标
g.drawLine(X=50,Y=50,X=500,Y=50);
//竖线,横坐标不变
g.drawLine(X=50,Y=50,X=50,Y=500);
}
PS:而棋盘不止两条线,需要多跟横线和竖线,所以想到用for循环,用画棋盘这部分代码来代替画两条垂直的线的代码。
// 画棋盘
for(int i = 0;i <= C;i++){
// 画多条横线,第一个点的横坐标每次不变,纵坐标每次加上间隔
g.drawLine(X,Y+i*SIZE,X + C * SIZE,Y + i * SIZE);
//画多条竖线,第一个点的纵坐标每次不变,横坐标每次加上间隔
g.drawLine(X + i * SIZE,Y,X + i * SIZE,X + C * SIZE);
4.创建鼠标监听器 GoBangListener
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class GoBangListener implements MouseListener,GobangConfig1{
Graphics g;
/**
* 用构造器 创建对象时才调用 且只调用一次
*/
public GoBangListener(Graphics g){ this.g=g; }
int flag=0;
@Override
public void mousePressed(MouseEvent e){
//获取鼠标按下的坐标
int x = e.getX();
int y = e.getY();
//判断语句
if(flag==0){
g.setColor (Color.BLACK);
flag=1;
}else{
g.setColor (Color.WHITE);
flag=0;
}
//圆的外切矩形左上角
g.fillOval(x-SIZE/2,y-SIZE/2,SIZE,SIZE);
}
@Override
public void mouseClicked(MouseEvent e){}
@Override
public void mouseReleased(MouseEvent e){}
@Override
public void mouseEntered(MouseEvent e){}
@Override
public void mouseExited(MouseEvent e){}
}
5.在界面UIZ中加入监听器
//监听器
GoBangListener gl = new GoBangListener(g);
//给界面加上鼠标监听器
this.addMouseListener(gl);
至此,界面UIZ中的完整代码为:
import javax.swing.*;
import java.awt.*;
public class UIZ extends JFrame implements GobangConfig1 {
public void initGobangUIZ() {
this.setTitle("五子棋-NO.1");
this.setSize(850, 850);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
this.setVisible(true);
//Graphics-画笔
Graphics g = this.getGraphics();
//监听器
GoBangListener gl = new GoBangListener(g);
//给界面加上鼠标监听器
this.addMouseListener(gl);
}
public void paint(Graphics g){
super.paint(g);
// 画棋盘
for(int i = 0;i <= C;i++){
// 画多条横线,第一个点的横坐标每次不变,纵坐标每次加上间隔
g.drawLine(X,Y+i*SIZE,X + C * SIZE,Y + i * SIZE);
//画多条竖线,第一个点的纵坐标每次不变
g.drawLine(X + i * SIZE,Y,X + i * SIZE,X + C * SIZE);
}
}
public static void main(String[] args) {
new UIZ().initGobangUIZ();
}
}
执行代码,结果为
虽然实现了黑白起轮流下一子,初步矫正了坐标,使得鼠标所点击之处成为了棋子的中心位置,但并没实现矫正鼠标点击之处、棋子不相互重叠的问题,期待下次解决此问题