之前的画图板重绘功能是用每个形状的信息存储的(具体见前一篇博客),但是我们发现这样做既让代码冗长,又会出现很多错误,所以我们采用新的方法来重绘,这里就利用了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]);
}
}
分享到:
相关推荐
画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码画图板 代码...
在本文中,我们将深入探讨BMP格式的解析与保存,并结合画图板的重绘功能来讲解这一主题。 首先,我们需要理解BMP文件的结构。BMP文件分为两部分:文件头和图像数据。文件头包含文件信息,如文件大小、图像宽度、...
JPanel是添加到JFrame中的可绘制区域,我们将在这里实现画图功能。 3. **鼠标事件处理**: - **MouseListener**:包含四个方法,分别是mousePressed、mouseReleased、mouseClicked和mouseEntered。在画图板中,...
它提供了丰富的基本画图功能,让用户能够轻松地进行创意表达。本文将深入探讨Windows画图板在动态画图方面的应用及其主要特点。 一、动态画图的实现 动态画图是指在画图过程中,图像可以根据用户的操作实时变化,...
Java 画图板是使用 Java 语言编写的图形绘制程序,提供了基本的绘图功能,如画笔、直线、椭圆、矩形等,用户可以使用该程序绘制简单的图形。下面我们将对 Java 画图板程序进行详细的分析和解释。 1. Java 画图板...
画图板的核心功能通常包括以下几点: 1. **选择颜色**:用户可以选择不同颜色进行绘制,这通常通过颜色选择器组件实现,如JColorChooser。 2. **选择工具**:用户可以选择不同的绘图工具,如线条、矩形、圆形、...
Java画图板应用是一种基于Java编程语言开发的图形用户界面(GUI)程序,它提供了类似Windows操作系统内置画图板的功能。这个程序的核心是利用Java的Swing或JavaFX库来构建用户界面,允许用户进行基本的绘图操作,如...
标题中的“用java编的画图板 功能齐全 外观精美”表明这是一个使用Java编程语言开发的图形用户界面(GUI)应用,主要用于绘画和图形编辑。它具有丰富的功能和良好的视觉设计,使得用户可以方便地进行各种图形操作。 ...
本项目名为“超强VB画图板 功能最全版”,是作者通过深入学习和实践,在计算机图形学课程设计中完成的一款集大成之作。它不仅展示了VB的强大功能,还体现了作者对计算机图形绘制的深入理解。 VB画图板的核心在于...
4. **鼠标事件处理**:为了实现画图功能,我们需要捕获和处理鼠标按下、移动和释放等事件。通过这些事件,我们可以计算出鼠标在画布上的轨迹,然后使用QPainter在适当的位置绘制线条或图形。 5. **绘图模式**:画图...
【描述】"仿XP画图板"实现了画图板的多数核心功能,包括但不限于选择不同的画笔、颜色、线型,以及橡皮擦、填充、复制、粘贴、撤销、重做等操作。它的界面设计与XP原版画图板极其相似,这不仅提供了用户熟悉的操作...
【JAVA简易画图板】是一个基于Java编程语言开发的简单绘图应用程序,它为用户提供了一个基本的图形界面,用户可以通过这个界面进行简单的绘画操作。这个程序包含了一些基本的绘图功能,如绘制形状、使用铅笔工具以及...
这个"基于qt实现的画图板"项目提供了一个基础的图形用户界面(GUI)应用,让用户能够进行基本的绘画操作,比如选择画笔、填充颜色、打开和保存图像。以下是关于这个项目的一些关键知识点和相关技术的详细解释: 1. ...
画图板是一个基础且功能丰富的应用,常常作为学习图形用户界面(GUI)编程的一个入门项目。本文将重点介绍Qt的GUI框架、主要组件以及编程概念。 ### 标题知识点解析 #### QTcreator QtCreator是一个集成开发环境...
画图板工具里面包含了基本图形的绘图功能,功能全,操作简单。是vs平台上基于c#语言的开发程序
本篇文章将深入探讨一个基于VC++(Visual C++)编写的“画图板”程序,该程序旨在模拟Windows系统自带的画图工具,提供手绘线、绘制简单图形、文字输入、图块拖放、重复撤销、画面缩放以及图片的打开与保存等核心...
为了实现画图功能,我们需要在自定义的CView 子类中重写OnDraw 函数。这个函数会在视图需要重绘时被调用,我们可以在这里使用GDI (Graphics Device Interface) 来绘制图形。GDI 提供了一系列的函数,如MoveTo、Line...
从功能上来看,这款画图板应包含多种基础和进阶的绘图功能。它可能具备画笔、橡皮擦、尺子、圆规等基础绘图工具,能够帮助学生绘制直线、曲线、圆形和其他几何图形。除此之外,进阶功能可能包括颜色填充、线条粗细...
这可能是通过设置一个特定的颜色(如背景色)和不透明度,然后在指定区域内重绘,以达到擦除效果。 5. **颜色选择**:用户可以改变画笔颜色,这需要实现颜色选择器,可能是一个颜色对话框,用户选择颜色后,将所选...
在本项目“超强VB画图板 最全功能板”中,开发者利用VB的强大功能,创建了一个功能丰富的图形编辑工具,可以满足用户多种绘图需求。 首先,我们要理解VB中的画图机制。在VB中,通常使用PictureBox或Form控件作为...