实现功能目录:
- 画棋盘,并且重绘
- 实现棋盘的动态绘制
- 加按钮
一、棋盘绘制
五子棋的棋盘是15x15的规格,但是如果你想,你也可以做成10x10,100x100,或者填满你的窗体
另外,为了保证在移动窗体的过程中不出现棋盘的丢失,我们可以重绘,这样,不管你的窗体在桌面上怎样移动,都会不断的绘制棋盘
import java.awt.Color;
import java.awt.Graphics;
import java.util.ArrayList;
import javax.swing.JPanel;
//实现棋盘总是居中显示
public class MyPanel extends JPanel{
int row=15,column=15,x0,y0,size;
public void paint(Graphics g){
super.paint(g);
//size是每一个格子的宽度
//(x0,y0)是棋盘的左上角初始绘制位置
//以下实现了棋盘在窗体改变大小时一直居中,并且棋盘大小也随之变化
size = Math.min(this.getHeight(), this.getWidth())/row;
x0 = (this.getWidth()-(column-1)*size)/2;
y0 = (this.getHeight()-(row-1)*size)/2;
//重绘出棋盘
g.setColor(Color.BLACK);
for(int i=0;i<row;i++) {
g.drawLine(x0, y0+size*i, x0+size*(column-1), y0+size*i);
}
for(int j=0;j<column;j++) {
g.drawLine(x0+size*j, y0, x0+size*j, y0+size*(row-1));
}
}
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GobangFrame extends MyPanel {
Graphics g;
public static void main(String[] args){
GobangFrame gf = new GobangFrame();
gf.initUI();
}
public void initUI(){
//顶级容器JFrame默认为边框布局
//JPanel默认为流式布局
JFrame jf = new JFrame();
jf.setTitle("五子棋");
jf.setSize(800,650);
jf.setDefaultCloseOperation(3);//关闭进程
jf.setLocationRelativeTo(null);//设置窗体居中显示
JPanel jp = new JPanel();//棋盘区
Dimension dim1 = new Dimension(550,0);
Dimension dim2 = new Dimension(150,0);
Dimension dim3 = new Dimension(140,40);
ButtonListener bl = new ButtonListener(this);
//将按钮加到右界面,同时加上监听器
String btnstr[] = {"开始游戏","悔棋","认输"};
for (int i = 0; i < btnstr.length; i++) {
JButton btn = new JButton(btnstr[i]);
btn.setPreferredSize(dim3);
btn.addActionListener(bl);
jp.add(btn);
}
this.setPreferredSize(dim1);
jp.setPreferredSize(dim2);
//将棋盘颜色设置为浅灰色
this.setBackground(Color.LIGHT_GRAY);
jp.setBackground(Color.WHITE);
jp.setLayout(new FlowLayout());//设置JPanel为流式布局
jf.add(this,BorderLayout.CENTER);
jf.add(jp,BorderLayout.EAST);
jf.setVisible(true);//窗体可视,写在函数最后
}
}
注意:
jf.setDefaultCloseOperation(3);//关闭进程
这句代码的作用是在关闭窗体后,使此窗体完全停止运行。