画图板重绘功能的改进

之前的画图板重绘功能是用每个形状的信息存储的(具体见前一篇博客),但是我们发现这样做既让代码冗长,又会出现很多错误,所以我们采用新的方法来重绘,这里就利用了Java里面向对象的思想。

首先是将自定义队列List进行改进,让这个队列不再存储很乱的信息像既有坐标又有颜色什么的,而是直接将一个形状封装成一个对象存储进队列,这样画一个形状存储一个,既不会出现前一篇博客中的类转换异常,又使代码简洁。

以直线举例:

if("line".equals(shape_command))		
{
	if(x1!=x2&&y1!=y2)
	{
		shape = new Line(x1, y1, x2, y2,color_command);
		shape.draw(g);
		list.add(shape);
	}
}

如上,直线被封装成了一个shape类,在list里存储的也就是这些shape类型了

由代码可以看到Shape类的创建中还用到了直线类Line,这是因为Shape类只是一个抽象的思想,
它是所有指定形状的共同点的体现,代码如下:

/** 
 * 顶级形状类 
 * */
public abstract class Shape {

	//形状的坐标
	public int x1,y1,x2,y2;
	
	//形状的颜色 
	public Color color;
	
	//画笔的宽度
	public int width;
	
	//矩形的圆角系数
	public int round;
	
	//是否填充
	public boolean isfill;
	
	public Shape(int x1,int y1,int x2,int y2,Color color)
	{
		this.x1 = x1;
		this.y1 = y1;
		this.x2 = x2;
		this.y2 = y2;
		this.color = color;
	}
	
	public abstract void draw(Graphics g);
}


所以其他形状只要继承它即可。以直线举例:

public class Line extends Shape{

	//构造方法
	public Line(int x1, int y1, int x2, int y2, Color color) {
		super(x1, y1, x2, y2, color);
	}

	public void draw(Graphics g)
	{
		g.setColor(color);
		g.drawLine(x1, y1, x2, y2);
	}
}


最后,List的代码也要相应改成存储Shape的了:

public class MyList {
	private Shape[] srcArray = new Shape[0];
	
	//获取数组长度的方法
	public int length()
	{
		return srcArray.length;
	}
	
	//获取元素的方法
	public Shape get(int i)
	{
		return srcArray[i];
	}
	
	//清空所有元素的方法
	public void clear()
	{
		srcArray = new Shape[0];
	}
	
	//在数组的最后添加元素的方法
	public void add(Shape elements)
	{
		Shape[] destArray = new Shape[srcArray.length+1];
		for(int i=0;i<srcArray.length;i++)
		{
			destArray[i] = srcArray[i];
		}
		destArray[srcArray.length] = elements;
		srcArray = destArray;
	}

	//删除一段区间元素的方法
	public void delete(int start)
	{
		if(start ==0)
		{
			clear();
		}else
		{
			Shape[] destArray = new Shape[start];
			for(int i=0;i<start;i++)
			{
				destArray[i] = srcArray[i];
			}
			srcArray = destArray;
		}
	}
	
	public void print()
	{
		for(int i=0;i<srcArray.length;i++)
			System.out.println(srcArray[i]);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当用画图板举例功能模块图的绘制时,可以将画图板划分为以下几个主要功能模块: 1. 用户界面模块:包括主界面、工具栏、菜单栏、属性栏等,用于展示和操作画图板的用户界面元素。 2. 绘图模块:负责处理用户的绘图操作,包括绘制基本图形、绘制自由曲线、选择和编辑图形等。 3. 文字标注模块:用于添加和编辑文字标注,包括选择字体、大小、颜色等属性。 4. 撤销重做模块:负责处理用户的撤销和重做操作,保存和管理绘图历史记录。 5. 文件管理模块:用于保存和加载绘制的图像文件,支持不同的图像格式。 6. 辅助功能模块:包括图层管理、网格显示、取色器等辅助功能,以增强用户的绘图体验。 下面是一个简化的画图板功能模块图示例: ``` +------------------+ | 用户界面模块 | +------------------+ | | v +------------------+ | 绘图模块 | +------------------+ | | v +------------------+ | 文字标注模块 | +------------------+ | | v +------------------+ | 撤销重做模块 | +------------------+ | | v +------------------+ | 文件管理模块 | +------------------+ | | v +------------------+ | 辅助功能模块 | +------------------+ ``` 这个功能模块图描述了画图板的主要功能模块,并展示了它们之间的关系和交互。每个模块负责不同的功能,通过相互协作来实现画图板的整体功能。在具体实现时,可以根据需求进一步细化每个模块,并确定它们之间的接口和交互方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值