当我们用Graphics画出一些图形之后,一旦改变整个窗体的大小或者最小化之后,原本画出的图形就消失不见,这就需要对之前所画出的图形进行重绘,而重绘就需要重写paint方法。
我们首先来想,为什么计算机能够对图形进行重绘?是不是只有将图形数据保存下来,才能重绘。由此就引入数组的概念。
一、数组
数组能够顺序存储相同类型的很多个数据,当然,也希望能够对数组中的数据进行访问,其方法为:数组名【索引】。若一个数组中有N个值,则它的索引为0到N-1。
1.数组的声明和创建
在声明数组时,需要给出数组中所包含的数据类型和数组名,格式为:数据类型[] 数字名,如:int[] a;然后要对数组进行创建(或者说是开辟),格式为:数组名 = new 数据类型[N],N为数组长度,如:a = new int[50];
//完整的写法
int[] a;//声明数组
a = new int[50];创建数组
for(int i = 0;i<50;i++){
//初始化
a[i] = 0;
}
//简洁的写法
int[] a = new int[50];//即声明并开辟了一个长度为50的整型数组,且初始化,每个元素的值为0
2.数组的使用
如果没有引入数组之前,要定义10个整型变量,只能进行如下操作
int i1,i2......i50;
这样操作,就显得代码繁杂,而引入数组之后,只需要进行如下操作
int[][] a = new int[49];
这就定义了一个长度50的int型的数组。
数组创建之后,大小就固定,不可在更改,要想得到数组的长度,可以:数组名.length。在对数组进行使用的时候,程序会自动进行边界检查,一旦所使用的索引大于数组的长度或小于0,就会报错:ArrayoutOfBoundsException.
二、重绘
引入数组之后,就可以对图形进行重绘。分为2步,第一:定义一个数组类,将保存图形数据到数组中,第二:通过数组中的数据重绘图形到窗体上。
接下来以重绘直线为例。直线的数据主要有:起始点,终止点,颜色。而前面说过,数组时用于存储相同数据类型的数据,那么就需要我们自己定义一个保存直线数据的图形类,并在类中构造方法,初始化它的属性。