最近在写将画出来的几个图形存入对象数组中,然后通过滑杆调节图形大小,通过逐个读取数组重绘图形。

先建一个图形类,图形的属性有起始坐标 x,y,以及宽和高w,h,以及图形的名字name:

public class picSave {
	int x, y, w, h;
	String name;
}

在执行动作的类里定义一个图形对象数组,以监听器类中为例:

public class drawListener implements MouseListener,ActionListener,ChangeListener{
	picSave[] pic= new picSave[20]; 
}

通过各种方法得到 x,y,w,h,name 以后,将其存入数组,这里 count 从0开始,每画一个图形加1,代码如下:

int count = 0;
	picSave p = new picSave();
	pic[count] = p;
	pic[count].x = startx;
	pic[count].y = starty;
	pic[count].w = endx-startx;
	pic[count].h = endy - starty;
	pic[count].name = bl.cmd;
	count++;

这里需要注意得的是还要创建一个图形对象 p,让 pic[count] = p,否则会报空指针异常,这个地方我处理了好久才终于正常…

picSave p = new picSave();
	pic[count] = p;

逐个存入数组后,通过循环遍历数组 ,然后就可以调用数组里每个对象的属性了:

for (int i = 0;i<pic.length ;i++){
	picSave p = new picSave();
	p=pic[i] ;
    System.out.println(p.x+" "+p.y" "+p.w" "+p.h" "+p.name);
    System.out.println(pic[i].x+" "+pic[i].y+" "+pic[i].w+" "+pic[i].h+" "+pic[i].name);
    //两种输出结果相同
}

问题

我现在写的这个代码就是还没解决储存每个图形颜色的问题。之前是通过获取每个图形的 Color 存入 pic[i].color 属性里,但是最后画出来调节大小的时候就全都变成最后一次获取的颜色了。
猜测原因是 Color 是地址传递,最后所有的 .color 属性都指向同一个Color了。
目前想到的解决方案是获取 Color 的 RGB 数值分别储存起来,但是还没有动手操作。