中南大学JAVA课程设计报告.docx

上传人:b****2 文档编号:23029394 上传时间:2023-04-30 格式:DOCX 页数:14 大小:66.11KB
下载 相关 举报
中南大学JAVA课程设计报告.docx_第1页
第1页 / 共14页
中南大学JAVA课程设计报告.docx_第2页
第2页 / 共14页
中南大学JAVA课程设计报告.docx_第3页
第3页 / 共14页
中南大学JAVA课程设计报告.docx_第4页
第4页 / 共14页
中南大学JAVA课程设计报告.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

中南大学JAVA课程设计报告.docx

《中南大学JAVA课程设计报告.docx》由会员分享,可在线阅读,更多相关《中南大学JAVA课程设计报告.docx(14页珍藏版)》请在冰豆网上搜索。

中南大学JAVA课程设计报告.docx

中南大学JAVA课程设计报告

中南大学

JAVA课程设计报告

 

题目:

简单图形实现

 

目录

 

设计分析................................................3~4

 

程序结构..................................................4

 

功能及说明..............................................5~11

 

操作方法..............................................11~12

 

实验结果..............................................12~13

 

1、设计分析

1、项目要求

实现各种二维图形的基本操作,要求采用图形用户界面

(1)实现圆、矩形、三角形的创建及参数修改

(2)实现各种图形的绘制

(3)求各种图形的面积和周长

(4)实现同一类型图形的大小比较

(5)实现同一类型的形状比较

2、实现分析

首先项目要求采用图形用户界面,当然首先要创建出一个界面JFrame出来。

在这个界面中,首先做一个总体的布局:

本次试验简单的采用流式布局,当然我们希望画图的时候有一个特定的区域,以便我们能够控制边界,采用一个JPanel,将这个JPanel添加到JFrame中,我们在面板中画各种图形。

当然我们还要有一些按钮,来标明形状和颜色。

因此,我们的整个界面分为两大部分,上面为形状颜色按钮,下面为画图板。

JAVA中自带有画出各种图形的函数,只需要我们获取一个画笔,然后利用这个画笔来调用各种方法即可。

但是我们怎么控制利用我们的鼠标来画图呢,及在这里,鼠标就相当于一支笔。

当然是利用监听器。

在这个程序中,我们要用到三种监听器,ActionListener、MouseListener、MouseMotionListener。

前面我们讲到我们的窗体中上一层是按钮,而这些按钮就要用到ActionListener监听器,后面两个监听器主要是在画图的过程中用到。

我们再来看看我们的这个画图板要实现的功能。

首先,要能画出各种图形,包括矩形,圆形,三角形,直线,曲线,当然还可以有其他的一些图形,在这里只列出一些有代表性的图形;

其次,要能改变图形的颜色,当然,JAVA中的颜色有多种,在这里也只列出一些有代表性的颜色,比如黑色,红色,蓝色,绿色,黄色。

在JAVA中画图有两种方式,一种直接画线条,里面还是背景色,还有一种就是用填充的方式来画图。

这两种方式在JAVA中都有自带的方法,只需要我们去调用就可以了。

然后,要能知道画出的图形是什么图形,以及画出图形的面积大小。

这就需要在界面中添加两个文本框来显示形状和面积。

在这里,要注意的是这个面积是根据鼠标移动的位置来计算的,算出的单位是像素。

最后,要有个橡皮擦按钮,只要一点击这个按钮,鼠标就像一块橡皮一样,可以擦掉画出来的图形。

到此,我们已经分析的本次试验的大体结构以及要实现的目标功能。

我们现在应该要对本次实验有一个清晰的认识,通过上面的分析,我们知道,本次试验只需要一个窗体JFrame、一个面板JPanel、三个监听器以及若干按钮就可以实现。

2、程序结构

 

 

 

 

3、功能及说明

在本次实验中,总共设计了三个类,每个类都有特定的作用,下面就意义介绍着三个类。

DrawSe.java

Mouse.java

Shape.java

(1)、DrawSe.java

首先我们开始这个项目的第一步是从界面开始的,创建一个界面比较简单,就是那么几个语句。

在DrawSe.java这个类的设计中,除了主方法,只有两个方法,其中一个就是将那个界面展示在我们面前,还有一个就是要实现重绘的功能。

熟悉了整个类的功能后我们来分解这个类,让我们来看看这些功能具体是怎么实现出来的。

首先在publicvoidshowDS()这个方法中,主要功能是要将那个界面展示在我们面前,当然首先要用到以下语句来创建一个窗体。

JFramejf=newJFrame();

jf.setTitle("画图板二");

jf.setSize(800,600);

jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

jf.setLocationRelativeTo(null);

jf.setLayout(newFlowLayout());

jf.setVisable(true);

这些语句是固定的,每个界面用到的可能也就是这些,这些语句的作用分别是:

设置标题、设置大小、设置关闭方法、设置居中、设置流式布局、使之可见。

此时一运行程序就会产生出一个JFrame窗体。

在我们前面的分析中,在这个窗体中应该有一些按钮、文本框、JPanel等,因此,下面我们就来一步步添加这些组件。

在这里,我们要注意的一点就是所有组件的添加要放在setVisable()之前,这样才能让添加的组件可见。

我们的形状按钮中,我们将它设置成一个个小的图片,要添加图片我们可以用到ImageIcon,首先利用下面语句创建出这些ImageIcon对象。

ImageIconim1=newImageIcon(this.getClass().getResource("直线.PNG"));

ImageIconim2=newImageIcon(this.getClass().getResource("矩形.PNG"));

ImageIconim3=newImageIcon(this.getClass().getResource("椭圆.PNG"));

ImageIconim4=newImageIcon(this.getClass().getResource("三角.PNG"));

ImageIconim5=newImageIcon(this.getClass().getResource("曲线.PNG"));

ImageIconim6=newImageIcon(this.getClass().getResource("橡皮擦.PNG"));

ImageIconim7=newImageIcon(this.getClass().getResource("动直线.PNG"));

ImageIconim8=newImageIcon(this.getClass().getResource("扇形.PNG"));

ImageIconim9=newImageIcon(this.getClass().getResource("多边.PNG"));

创建好这些对象后,使用下面的语句创建按钮对象,并将这些图片添加到按钮中。

其中jb11.setActionCommand("橡皮擦.PNG")语句的作用是设置点击该按钮是应该获取的信息,即当点击这个按钮时就会返回"橡皮擦.PNG"这个字符串。

JButtonjb11=newJButton(im6);

jf.add(jb11);

jb11.setPreferredSize(newDimension(22,22));

jb11.setActionCommand("橡皮擦.PNG");

JButtonjb1=newJButton(im1);//添加形状按钮

jf.add(jb1);

jb1.setPreferredSize(newDimension(22,22));

jb1.setActionCommand("直线.PNG");

JButtonjb2=newJButton(im2);

jf.add(jb2);

jb2.setPreferredSize(newDimension(22,22));

jb2.setActionCommand("矩形.PNG");

JButtonjb3=newJButton(im3);

jf.add(jb3);

jb3.setPreferredSize(newDimension(22,22));

jb3.setActionCommand("椭圆.PNG");

JButtonjb4=newJButton(im4);

jf.add(jb4);

jb4.setPreferredSize(newDimension(22,22));

jb4.setActionCommand("三角.PNG");

JButtonjb8=newJButton(im5);

jf.add(jb8);

jb8.setPreferredSize(newDimension(22,22));

jb8.setActionCommand("曲线.PNG");

JButtonjb10=newJButton(im7);

jb10.setPreferredSize(newDimension(22,22));

jb10.setActionCommand("动直线.PNG");

jf.add(jb10);

JButtonjb9=newJButton(im8);

jb9.setPreferredSize(newDimension(22,22));

jb9.setActionCommand("扇形.PNG");

jf.add(jb9);

JButtonjb14=newJButton(im9);//添加形状按钮

jf.add(jb14);

jb14.setPreferredSize(newDimension(22,22));

jb14.setActionCommand("多边.PNG");

然后添加颜色按钮,这和添加形状按钮类似,只是颜色安妮中什么都不要放,只要设置一下按钮的背景颜色就可以了,也不要重新设置点击按钮时的监听信息。

这样,颜色按钮就可以和形状按钮区分开来,点击按钮,当返回一个字符串时,就是形状按钮,当返回一个空字符串就是颜色按钮。

接下来添加文本框用来显示信息。

jla1=newJLabel("形状");

jf.add(jla1);

jte1=newJTextField(8);

jf.add(jte1);

jla2=newJLabel("面积");

jf.add(jla2);

jte2=newJTextField(8);

jf.add(jte2);

这个方法的最后一部分就是将这些按钮添加监听器,添加监听器的方法是先拿到监听器的对象,然后利用jb1.addActionListener(mouse)这个语句来添加监听器。

由于监听是一个接口,因此我们不能直接new出监听器接口的对象,必须要先用一个子类来实现监听器接口,new出子类的对象,在这个语句中mouse就是一个实现了ActionListener接口的类的对象。

在这个类中还有一个重绘的方法publicvoidpaint(Graphicsg),这个方法是JPanel中的,在这里重写这个方法,在程序运行的时候,程序会自动调用这个方法。

这个方法的作用是在我们移动后拉伸窗体的时候,我们画出的图形还是在那里不变。

(2)、Mouse.java

前面我们也说了,监听器是一个接口,不能直接实例化,我们要先用一个子类来实现这个接口,因此,这个类的主要作用就是实现监听器接口。

这个类共实现了以下三个监听器MouseListener,ActionListener,MouseMotionListener

实现接口的时候就要重写接口中的抽象方法。

首先我们看看按钮添加的动作监听器,我们要点击按钮,要获取一个返回值,根据这个返回值来做出不同的反应。

比如当我们点击矩形按钮时,我们的画笔就要能够画出一个矩形来,如果我们还点了红色按钮,那么,我们的画笔就要能画出一个红色矩形来。

那么,怎么才能实现这些功能呢,这就是监听器中的抽象方法要做的事。

动作监听器中比较简单,只需要获取按钮中的信心,如果是一个字符串,就不要管,留给另外两个监听器去处理。

当返回一个空字符串时,就是动作监听器要处理的事了。

返回空字符串表示点击的是颜色按钮,要将画笔的颜色设置为该按钮的背景色。

因此首先要获取该按钮的背景色,然后将画笔设置为该颜色。

publicvoidactionPerformed(ActionEvente){//动作监听器

str=e.getActionCommand();

if("".equals(str)){

JButtonjb=(JButton)e.getSource();

color=jb.getBackground();

g.setColor(color);

str="直线.PNG";//默认为直线

}

}

当我们点击形状按钮时,就要画出各种形状的图形出来。

当我们点击直线时,画笔要画出一条直线。

前面说过JAVA中有画各种图形的方法,只需要我们去调用就可以了。

JAVA中有直接画直线的方法,因此画直线比较简单。

if("直线.PNG".equals(str)){

g.drawLine(x1,y1,x2,y2);

Shapeline=newShape(x1,x2,y1,y2,"直线",color);//创建出一个Shape对象

shape[index++]=line;//保存下画出的直线

jte1.setText("直线");

jte2.setText(""+0);

}

画矩形的方法如下:

if("矩形.PNG".equals(str)){

g.drawRect(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x1-x2),

Math.abs(y1-y2));

Shapeju=newShape(x1,x2,y1,y2,"矩形",color);

shape[index]=ju;//存下矩形

index++;

floats=Math.abs(x1-x2)*Math.abs(y1-y2);

jte1.setText("矩形");

jte2.setText(""+(int)s);

System.out.println("矩形面积:

"+s);

}

if("椭圆.PNG".equals(str)){

g.drawOval(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x1-x2),

Math.abs(y1-y2));

Shapetuo=newShape(x1,x2,y1,y2,"椭圆",color);

shape[index++]=tuo;

doubles=3.14*Math.abs(x1-x2)*Math.abs(y1-y2)/4;

jte1.setText("椭圆");

jte2.setText(""+(int)s);

System.out.println("椭圆面积:

"+s);

}

if("三角.PNG".equals(str)){

g.drawLine(x1,y1,x2,y2);

Shapes1=newShape(x1,x2,y1,y2,"三角形",color);

shape[index++]=s1;

x=x1;//暂时保存x1,y1,x2,y2这两个坐标,以便第二次点击时用到

y=y1;

x0=x2;

y0=y2;

}

if("三角.PNG".equals(str)){

if(x!

=x0){//str为“三角”且为第二次点击***

g.drawLine(x,y,x1,y1);

Shapes2=newShape(x,x1,y,y1,"三角形",color);

shape[index++]=s2;

g.drawLine(x0,y0,x1,y1);

Shapes3=newShape(x0,x1,y0,y1,"三角形",color);

shape[index++]=s3;

doublea,b,c,p,s;

a=Math.sqrt(Math.abs(x1-x0)*Math.abs(x1-x0)+Math.abs(y1-y0)*Math.abs(y1-y0));

b=Math.sqrt(Math.abs(x-x0)*Math.abs(x-x0)+Math.abs(y-y0)*Math.abs(y-y0));

c=Math.sqrt(Math.abs(x1-x)*Math.abs(x1-x)+Math.abs(y1-y)*Math.abs(y1-y));

p=(a+b+c)/2;

s=Math.sqrt(p*(p-a)*(p-b)*(p-c));

jte1.setText("三角形");

jte2.setText(""+(int)s);

System.out.println("三角形面积:

"+s);

}

}

到这里,这个类的基本功能已经实现的差不多了。

(3)、Shape.java

这个类的主要作用是定义一个形状类,将画出的图形保存。

 

4、操作方法

在画图板的这个小项目中,首先从主函数进入

publicstaticvoidmain(String[]args){//主方法

DrawSeds=newDrawSe();

ds.showDS();

}

调用showDs()这个方法,将界面展示在我们面前。

若我们不点任何按钮直接在面板中画图,就会画出一条直线(默认是直线)。

当我们点击按钮时,进入动作监听的方法,获取返回值,根据返回值的类型做出不同的反应。

比如点击矩形按钮就会进入publicvoidmouseReleased(MouseEvente)这个方法画出一个矩形。

每当一个图形画好后,在文本框的显示区显示出该图形的形状以及面积。

当点击颜色按钮时,又进入动作监听器,设置画笔的颜色。

 

5、实验结果

刚开始运行:

画图:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1