用Java语言编写一个绘图项目的完整过程

    技术2024-08-17  63

    Java语言是一个纯的面向对象的编程语言,如何用Java语言的面向对象的特点进行项目的设计和程序的编写呢?为了说明这个问题,这里提供一个小型项目的完整开发过程 

     

    为了更好地展现面向对象的特征,我用了一个最为经典的例子:形状接口、圆和矩形类所形成的类及其抽象和继承关系,以这些关系作为主线,来进行项目的设计。

      

    我们先来看一下项目最终的成果,程序运行的屏幕截图如下:

     

     

    图1 程序运行界面

     

    也可以下载字节码文件,在你的计算机上运行(需要Java 5以上)。

     

     一、需求分析

     这个小型项目的需求非常简单,为客户设计一个图形绘制软件,要求如下:

     

    a. 向屏幕添加并绘制矩形和圆。

    b. 可以用鼠标移动矩形和圆。

    c. 采用图形界面完成绘图项目。

    d. 程序应该具有可扩展性,例如可以增加绘制和处理三角形的功能。

     

    二、系统设计

     一开始,我们就要用面向对象的思路来考虑,我们可以想象程序完成后,在屏幕有多个圆和矩形,这些圆和矩形就是对象,每个对象都有自己的属性,圆的属性是半径和本身所处的位置,矩形的属性是高、宽和本身所处的位置,不仅如此,每个对象还有行为,那就是能够在屏幕上绘制出自己,绘制的过程就是以自己的属性(半径、或高宽),在屏幕上的一定位置(位置属性的值)画出自己(圆或矩形)。每个对象也够按照要求移动自己,移动的过程是按要求将自己的位置属性值改为新的位置,然后再重新绘制自己。

     

    根据上述思路,我们可以将所有的圆的对象抽象为一个圆类(MyCircle),将所有矩形的对象抽象为一个矩形类(MyRectangle)。

     

    因为绘制和移动等行为是所有形状共有的行为,因此我们把抽象的程度提高一个层次,将这些不同类所共有的行为抽象出来,放在一个接口中,把它称为形状接口(IShape),这个接口指出所有的形状类都应该有的行为,从而规范圆和矩形类等的行为。

     

    因为接口中的行为是没有实现的(它的方法都是抽象方法),不能实现代码的复用,因此我们还要把可以复用的代码(共用行为的实现)提取出来,放在一个抽象类中,这个抽象类称之为(MyShape)。

     

    另外,对于形状的位置,可以用形状的中心点来表示,也可以用形状的左上角来表示,一般来说用左上角表示比较好。这个位置是一个2维坐标的点,因此,也可以把它抽象为一个对象(MyLocation),它的属性只有2个:x, y,表示点的坐标值,当然它还应该有相应的方法来访问这个坐标值。

     

    上述类和接口一共有5个:MyCircleMyRectangleIShapeMyShapeMyLocation,它们是可以用眼睛看得到的。

     

    另外我们需要2个类,这2个类是无法用肉眼看到的,但却可以感知得到。一个类用于管理所有的形状对象,将它称为形状管理器(ShapeMgr),可能在某一时刻有3个圆和2个矩形,另一时刻有3个圆和4个矩形,也就是说,当向屏幕添加一个形状的时候,实际上是向ShapeMgr添加一个形状。ShapeMgr还负责向它管理的形状发号施令,例如要求所有的形状重新绘制自己。

     

    另一个类是代表了屏幕的类,也就是表示了绘图的空间,我们称之为画图板(Painting),它的外观见前述的图1

     

    如此一来,我们就有了7个类和接口,它们之间的关系如图2所示:

     

     

     

     

    图2 项目类图

     

     三、详细设计

    1、接口IShape

    它声明了所有形状应该具有的行为:

           计算面积:int area()

           绘制自己:void drawing(Graphics g)

           移动自己:void moveTo(MyLocation location)

           判断是否点击了自己:boolean insideMe(int x, int y)

    2、抽象类MyShape

    它声明了所有形状类共有的属性和可以复用的代码:

           形状的位置信息:MyLocation location

           移动方法对所有形状都是相同的:public void moveTo(MyLocation location)

    3、位置类MyLocation

    它声明了位置类的属性和方法:

           private int x;

           private int y;

           创建位置:public MyLocation(int x, int y)

           设置新的坐标点:public void setMyLocation(int x, int y)

           public int getX()

           public int getY()

    4、圆类MyCircle

    它声明了圆类所独有的属性和方法

           半径属性:int radius;

           public int getRadius()

           public void setRadius(int radius)

           计算圆本身的面积:public int area()

           绘制圆本身:public void drawing(Graphics g)

           判断是否点击了圆本身:public boolean insideMe(int x, int y)

    5、矩形类MyRectangle

    它声明了矩形类独有的属性和方法:

           二个矩形的属性:int width;

           int height;

           public int getWidth()

           public void setWidth(int width)

           public int getHeight()

           public void setHeight(int height)

           计算矩形本身的面积:public int area()

           绘制矩形本身:public void drawing(Graphics g)

           判断是否点击了矩形本身:public boolean insideMe(int x, int y)

    6、形状管理器ShapeMgr

    它声明了与管理形状有关的属性和方法:

           用一个List保存所有的形状(圆、矩形或其它形状):private List<IShape> shapeList;

           public ShapeMgr()

           添加一个形状(圆、矩形或其它形状):public void addShape(IShape shape)

           移除一个形状(圆、矩形或其它形状)public void removeShape(int shapeIndex)

           统计含有多少个形状:public int size()

           通过下标获得形状:public IShape getShape(int shapeIndex)

           重新绘制所所形状:public void redrawing(Graphics g)

    7、画图板Painting

    它是GUI编程的主体,实现图形界面的编程

     

    四、包的设计

    org.ngweb.drawing.interfaze包:所有接口放在这里。interfazeinterface的不同拼写,避免用关键词。

    org.ngweb.drawing.shapes包:所有类和抽象类放在这里。

    org.ngweb.drawing.manager包:管理类放在这里。

    org.ngweb.drawing.view包:Painting类放在这里。

     

    org.ngweb.drawing.test包:可选地,把测试类放在这里。

     

    五、项目的实现

     

    本项目分三个阶段实现,

    绘图项目

    用到的知识点

    绘图项目(一)

    类、接口、继承、多态、包

    绘图项目(二)

    容器APIList

    绘图项目(三)

    事件处理、按钮、绘图

     

    具体的实现过程,见SWF视频材料:

     

    第一阶段视频:点击观看。 

      

     

     

    第二阶段视频:点击观看。

     

     

    第三阶段视频:点击观看。 

     

     

     

    附录:资源下载地址

     本文改编自作者出版的新书《Java程序设计及实训》,该书由机械工业出版社出版,主页为www.ngweb.org。详细内容见该网站,并可下载有关资源。

     

    本文系原创,如果转载,请注明从转载,并保留上述资源下载地址。

     

     

     

    ---------------------------- 全文结束-------------------------

     

     

     

     

     

    最新回复(0)