数组以及二维数组的重绘

               数组以及二维数组的重绘
一:数组
数组是相同类型的数据按顺序组成的一种复合数据类型。通过数组名加数组数组下标来使用数组中的数据。(注意:数组是线 性的一种数据存储结构,且下标从0开始)
1. 数据在java中是属于引用数据类型的,也可以理解成是一个对象,但是它只有一个属性和一个方法,就是长度length属性 和方法。怎样从数组中获得我们想要的数据呢?通过下面的例子我们可以得到答案:
int arr[]=new int[10];//声明一个长度为10、数据类型为int的数组
int i=arr[7];//得到下标为7的元素值(下标是从0开始的)
int len=arr.length();//数组唯一自带的方法,得到数组的长度---->length=10
2.二维数组
  二维数组也是一种线性存储结构,同一维数组一样,只有一个length属性和length方法
定义一个二维数组 int[][]arr=new int[5][5];//声明一个有5行5列的二维数组
int row=arr.length//得到此二维数组的行数
int col=arr[2].length;//得到第3行的总列数
int num=arr.length;//得到此二维数组的总元素个数
3.定义数组的格式
一维数组:
a.数据类型 [] 数组名 = new 数据类型[length];

b.数据类型 [] 数组名 = {数值,...};

c.数据类型 [] 数组名;
  数组名 = new 数据类型[length];

d.数据类型 [] 数组名 = new 数据类型[]{数值,...};(不常用)

e.数据类型 [] 数组名;
  数组名 = new 数据类型[]{数值,...};(不常用)

二维数组:
a.数据类型 [][] 数组名 = new 数据类型[行数][列数];

b.数据类型 [][] 数组名 = {{数值,...},...};

c.数据类型 [][] 数组名;
  数组名 = new 数据类型[行数][列数];

d.数据类型 [][] 数组名 = new 数据类型[][]{{数值,...},...};(不常用)

e.数据类型 [][] 数组名;
  数组名 = new 数据类型[][]{{数值,...},...};(不常用)
4.数组的优点和缺点
优点:
a.存储空间是连续的,可以通过索引去获取到对应位置的数据
b.可以指定空间存储的数据类型时特定的某一种,也可以再实例化数组的时候就指定数组能存储数据的个数。

缺点:
a.要存储的数据个数是不定的。
b.要存储的数据类型也不确定,如果碰到这样的问题,数组就无法解决,可以用自定义队列来实现。
二. 二维数组的重绘
重绘原理:
1.所有的图片都是一个个的像素点组成的,可以把一张图片看成是一个二维数组
2.得到一张图片,然后使用二维数组来存放图片中的每个像素点


重绘方法:
1.用Robot类中的creatScreenCapture()方法获取一张图片image(注:creatScreenCapture(rect)<------ Rectangle rect=new Rectangle((int)p.getX,(int)p.getY,width,height)//(int)p.getX),(int)p.getY面板相 对于屏幕的(x,y—)坐标width,height面板的宽度和高度<--------Point p=panel.getLocationOnScreen)
2.储存颜色值
  Color [][] colorArray = new Color[panel.width][panel.height];
如何知道像素点图片是由x和y坐标组成,每一个x和y组成的就是一个像素点,可以使用BufferedImage中的 getRGB(x,y);就可 以获取到一个颜色的int值,然后通过new Color(int)就可以得到颜色。


什么时候重绘:
因为当执行最小化等某些操作时,重新打开界面时,实际上已经重新执行了一次主函数,这样之前我们画的图像 并没有进行保存,所以.我们要在美执行完一次事件动作就得保存一次。在窗体重绘的时候,将之前所画的图形全部进行一 次重绘的操作,必须要重写窗体的重绘方法
public void paint(Graphics g){
//调用父类的paint方法
super.paint(g);
//遍历二维数组,将数组中的内容取出进行一次重绘操作。
}
注意:重绘方法将由java的内部机制进行调用,不需要我们手动调用。

猜你喜欢

转载自871513532.iteye.com/blog/1617871