画板重绘_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 画板重绘

画板重绘

 2013/10/8 18:34:12  狼迹天涯  程序员俱乐部  我要评论(0)
  • 摘要:画图板重绘在制作画图板的过程中,出现一个问题。当画图板最小化之后,再还原,之前画过的图形会消失,又需要重新画,但画出来的图形就和之前的不一样了,很不方便。为解决这个问题,就需要用到画图板重绘。所谓重绘,就是将把原来画的图形重新在窗体中画出来,即当我们最小化窗体或者弹出颜色选择器时,原来的图形还出现在窗体上。那么如何实现重绘?1、利用泛型队列,将所有我们画过的图形保存在数组中,其中包括图形的种类,位置,及颜色。2、我们画的图形有直线、矩形、圆等。。因此可以定义一个图形父类。3
  • 标签:重绘

画图重绘

在制作画图板的过程中,出现一个问题。当画图板最小化之后,再还原,之前画过的图形会消失,又需要重新画,

但画出来的图形就和之前的不一样了,很不方便。

为解决这个问题,就需要用到画图板重绘。

所谓重绘,就是将把原来画的图形重新在窗体中画出来,即当我们最小化窗体或者弹出颜色选择器时,原来的图形

还出现在窗体上。

那么如何实现重绘?


1、利用泛型队列,将所有我们画过的图形保存在数组中,其中包括图形的种类,位置,及颜色。

2、我们画的图形有直线、矩形、圆等。。因此可以定义一个图形父类。

3、在还原窗体之后自动将数组中的每一个图形元素输出,即重新画出来。便可实现重绘。

?

一、

首先,定义一个抽象父类Shape类,包含坐标和颜色属性以及抽象的画的方法。

?

class="java">public abstract class Shape {

	int x1,y1,x2,y2;
	Color color;
	
	public abstract void draw(Graphics g);	

}

?

?

其次,定义一个泛型数组,将图形存入

?

public class MyArray<E> {
	
	//定义一个长度为0的初始数组
	Object[] src = new Object[0];
	

	//s为要装入容器的数据,在主函数中为图形:MyArray<Shape> shapes = new MyArray<Shape>();

	public void add(E s){
		//定义新数组,长度是原始数组长度+1
		Object[] dest = new Object[src.length+1];
		
		//将原数组中的数据按下标顺序拷贝到新数组
		for(int i=0;i<src.length;i++){
			dest[i]=src[i];
		}
		//将新元素放到新数组最后一个下标位置
		dest[src.length] = s;
		//将新数组赋给原数组
		src = dest;	
	}
	 
	// 取出对应下标位置的元素

	public E get(int index){
		//E为返回值类型。
		
		if(index<0||index>=src.length){	
			throw new RuntimeException("传入的下标超出边界:"+src.length);
		}
		return (E)src[index];
	}
	
	
	// 容器中的元素个数

	public int size(){
		return src.length;
	}

?

?

最后,在主函数中再次画出来,便实现了重绘。

?

	public void paint(Graphics g) {
		// 调用父类的方法来正确的绘制窗体
		super.paint(g);
		//public void paint(Graphics g):
		//绘制容器。该方法将 paint 转发给任意一个此容器子组件的轻量级组件。 
		
		// 遍历形状队列,重新绘制图形
		for(int i=0;i<shapes.size();i++){
			Shape sh = shapes.get(i);
			//绘制形状
			sh.draw(g);
		}

	}

?

?

画板实现步骤总结:

1、主界面的绘制

?需要运用Frame,Grahpics等类。

2、添加按钮监听
?
?继承鼠标监听器和事件监听器。

??????? 重写actionPerformed()等方法

3、图形类的定义
?
?定义抽象父类Shape包含抽象Draw方法

?绘制的直线、矩形、椭圆等可定义为子类,继承父类并实现Draw方法。

4、调用重绘方法

发表评论
用户名: 匿名