Java程序设计:五子棋(一)——编写界面

1.界面的预处理与刷新

我们要绘制五子棋棋盘,首先必须明确一点:不管我们在棋盘上怎么操作,棋盘的网格线是不可能改变的。无论是下棋,悔棋,网格线都会在那。故而我们应该知道,要想网格线始终存在,我们需要在后台存在一个绘制代码,一直不断的画这些网格线,同样在这一个代码区将来我们下了棋子之后也要不断的在下棋的位置画上棋子。

那么这样的代码区在哪呢?我们知道我们绘制界面的大框架是JFrame,其他的组件不断的往JFrame里加,我们查看调用可以发现,这些组件包括JFrame都继承于同一个类Component,而在这个类中正好就有我们所要找的代码区,也就是函数paint(Graphics g)与repaint()。

paint()是提供给用户编程的,往往声明在接口之中,然后用户实现该接口,以拥有重绘的功能。若要定制某个图形组件的界面,可以重写paint()方法,记得一般习惯这样改写:

void paint(Graphics g){ 

super.paint(g); 

// your code

}

而repaint是刷新,里面不光有调用paint()函数刷新背景,也会刷新该组件上的所有组件。当对于界面或组件执行了某类操作,改变了界面上的图象时,jvm收到界面被调整的信息,此时会调用visible是ture的图形组件的repaint()方法对界面重绘。当然,直接重绘或全部重绘是很亏的,一个是用双缓存技术,另一个是只对桌面上显示的部分重绘。双缓存是指在缓存内先模拟重绘过程,只把最后成形的结果传给显示器显示。部分重绘就是指使用repaint(Dimensionarea)及类似的方法,只重绘与需调整的部分相关的界面。幸运的是,目前jdk提供的repaint()并不是傻呼呼的就直接重绘所有组件,已经用了上述两种方法优化过了。所以即使反复调用repaint()也不会有效率的损失。

repaint()是重要概念,它是在图形线程后追加一段重绘操作,是安全的!是系统真正调用的重绘!所以如果你需要某个部件刷新一下界面,记得调用repaint(),千万不要直接调用paint()!因为paint()只用于预处理中设定背景所用,不能被外界调用,而repaint是可以的。

概括起来,如果想给你的界面设定一个亘古不变的背景,重写paint()函数,但如果你后期要改变界面内容,改完后用repaint()刷新。

2.五子棋盘的绘制

一般为了方便绘图,或者界面美观,五子棋棋盘的横线数和纵线数是相同的,界面大小也采用近似正方形的宽高比。

首先新建一个项目,新建一个主类,并在主类里加上主函数。因为要重写界面的paint()代码,在paint()中加上绘制背景棋盘的代码,因此这个类要继承这个界面的框架——JFrame。

下面是简单的五子棋棋盘绘制代码,你可以回去自己写出五子棋棋盘代码,长宽以及几乘几的格子都由你自己决定。

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JFrame;


public class Test extends JFrame {

	public void initUI() {
		this.setTitle("五子棋v0.1");
		this.setSize(1000, 1000);
		this.setResizable(false);//大小不可变
		this.setLocationRelativeTo(null);//默认居中
		this.setDefaultCloseOperation(3);//按下叉号默认关闭
		this.getContentPane().setBackground(new Color(240, 233, 217));//修改背景颜色
		this.setVisible(true);
	}
	
	public void paint(Graphics g) {
		super.paint(g);
		drawChessTable(g);
	}

	public void drawChessTable(Graphics g) {
		for (int i = 0; i < 19; i++)
			g.drawLine(50, 50 + i * 50, 50
					+ (19 - 1) * 50, 50 + i
					* 50);
		for (int j = 0; j < 19; j++)
			g.drawLine(50 + j * 50, 50, 50 + j
					* 50, 50 + (19 - 1)
					* 50);
	}
	
	public static void main(String args[]){
		new Test().initUI();
	}

}

运行之后结果是这样的:

Java程序设计:五子棋(一)——编写界面_第1张图片

你可能感兴趣的:(Java编程,郭天华原创,Java程序设计)