




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、中南大学JAVA课程设计报告 题 目: 简单图形实现 目录设计分析 .34程序结构 .4功能及说明.511操作方法 .1112实验结果 .12131、 设计分析1、 项目要求实现各种二维图形的基本操作,要求采用图形用户界面(1)实现圆、矩形、三角形的创建及参数修改(2)实现各种图形的绘制(3)求各种图形的面积和周长(4)实现同一类型图形的大小比较(5)实现同一类型的形状比较2、实现分析首先项目要求采用图形用户界面,当然首先要创建出一个界面JFrame出来。在这个界面中,首先做一个总体的布局:本次试验简单的采用流式布局,当然我们希望画图的时候有一个特定的区域,以便我们能够控制边界,采用一个JPa
2、nel,将这个JPanel添加到JFrame中,我们在面板中画各种图形。当然我们还要有一些按钮,来标明形状和颜色。因此,我们的整个界面分为两大部分,上面为形状颜色按钮,下面为画图板。JAVA中自带有画出各种图形的函数,只需要我们获取一个画笔,然后利用这个画笔来调用各种方法即可。但是我们怎么控制利用我们的鼠标来画图呢,及在这里,鼠标就相当于一支笔。当然是利用监听器。在这个程序中,我们要用到三种监听器,ActionListener、MouseListener、MouseMotionListener。前面我们讲到我们的窗体中上一层是按钮,而这些按钮就要用到ActionListener监听器,后面两个
3、监听器主要是在画图的过程中用到。我们再来看看我们的这个画图板要实现的功能。首先,要能画出各种图形,包括矩形,圆形,三角形,直线,曲线,当然还可以有其他的一些图形,在这里只列出一些有代表性的图形;其次,要能改变图形的颜色,当然,JAVA中的颜色有多种,在这里也只列出一些有代表性的颜色,比如黑色,红色,蓝色,绿色,黄色。在JAVA中画图有两种方式,一种直接画线条,里面还是背景色,还有一种就是用填充的方式来画图。这两种方式在JAVA中都有自带的方法,只需要我们去调用就可以了。然后,要能知道画出的图形是什么图形,以及画出图形的面积大小。这就需要在界面中添加两个文本框来显示形状和面积。在这里,要注意的是
4、这个面积是根据鼠标移动的位置来计算的,算出的单位是像素。最后,要有个橡皮擦按钮,只要一点击这个按钮,鼠标就像一块橡皮一样,可以擦掉画出来的图形。到此,我们已经分析的本次试验的大体结构以及要实现的目标功能。我们现在应该要对本次实验有一个清晰的认识,通过上面的分析,我们知道,本次试验只需要一个窗体JFrame、一个面板JPanel、三个监听器以及若干按钮就可以实现。2、 程序结构启动程序调用构造函数生成界面点击画图按钮点击颜色按钮改变画笔颜色显示形状及面积调用画图方法画图退出程序3、 功能及说明在本次实验中,总共设计了三个类,每个类都有特定的作用,下面就意义介绍着三个类。DrawSe.javaMo
5、use.javaShape.java(1)、DrawSe.java首先我们开始这个项目的第一步是从界面开始的,创建一个界面比较简单,就是那么几个语句。在DrawSe.java这个类的设计中,除了主方法,只有两个方法,其中一个就是将那个界面展示在我们面前,还有一个就是要实现重绘的功能。熟悉了整个类的功能后我们来分解这个类,让我们来看看这些功能具体是怎么实现出来的。首先在public void showDS()这个方法中,主要功能是要将那个界面展示在我们面前,当然首先要用到以下语句来创建一个窗体。JFrame jf = new JFrame();jf.setTitle(画图板二);jf.setSi
6、ze(800, 600);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jf.setLocationRelativeTo(null);jf.setLayout(new FlowLayout(); jf.setVisable(true);这些语句是固定的,每个界面用到的可能也就是这些,这些语句的作用分别是:设置标题、设置大小、设置关闭方法、设置居中、设置流式布局、使之可见。此时一运行程序就会产生出一个JFrame窗体。在我们前面的分析中,在这个窗体中应该有一些按钮、文本框、JPanel等,因此,下面我们就来一步步添加这些组件。在这里,我们要注
7、意的一点就是所有组件的添加要放在setVisable()之前,这样才能让添加的组件可见。我们的形状按钮中,我们将它设置成一个个小的图片,要添加图片我们可以用到ImageIcon ,首先利用下面语句创建出这些ImageIcon对象。ImageIcon im1 = new ImageIcon(this.getClass().getResource(直线.PNG);ImageIcon im2 = new ImageIcon(this.getClass().getResource(矩形.PNG);ImageIcon im3 = new ImageIcon(this.getClass().getReso
8、urce(椭圆.PNG);ImageIcon im4 = new ImageIcon(this.getClass().getResource(三角.PNG);ImageIcon im5 = new ImageIcon(this.getClass().getResource(曲线.PNG);ImageIcon im6 = new ImageIcon(this.getClass().getResource(橡皮擦.PNG);ImageIcon im7 = new ImageIcon(this.getClass().getResource(动直线.PNG);ImageIcon im8 = new I
9、mageIcon(this.getClass().getResource(扇形.PNG);ImageIcon im9 = new ImageIcon(this.getClass().getResource(多边.PNG);创建好这些对象后,使用下面的语句创建按钮对象,并将这些图片添加到按钮中。其中jb11.setActionCommand(橡皮擦.PNG)语句的作用是设置点击该按钮是应该获取的信息,即当点击这个按钮时就会返回橡皮擦.PNG 这个字符串。JButton jb11 = new JButton(im6);jf.add(jb11);jb11.setPreferredSize(new D
10、imension(22, 22);jb11.setActionCommand(橡皮擦.PNG);JButton jb1 = new JButton(im1); / 添加形状按钮jf.add(jb1);jb1.setPreferredSize(new Dimension(22, 22);jb1.setActionCommand(直线.PNG);JButton jb2 = new JButton(im2);jf.add(jb2);jb2.setPreferredSize(new Dimension(22, 22);jb2.setActionCommand(矩形.PNG);JButton jb3 =
11、 new JButton(im3);jf.add(jb3);jb3.setPreferredSize(new Dimension(22, 22);jb3.setActionCommand(椭圆.PNG);JButton jb4 = new JButton(im4);jf.add(jb4);jb4.setPreferredSize(new Dimension(22, 22);jb4.setActionCommand(三角.PNG);JButton jb8 = new JButton(im5);jf.add(jb8);jb8.setPreferredSize(new Dimension(22, 2
12、2);jb8.setActionCommand(曲线.PNG);JButton jb10 = new JButton(im7);jb10.setPreferredSize(new Dimension(22, 22);jb10.setActionCommand(动直线.PNG);jf.add(jb10);JButton jb9 = new JButton(im8);jb9.setPreferredSize(new Dimension(22, 22);jb9.setActionCommand(扇形.PNG);jf.add(jb9);JButton jb14 = new JButton(im9);
13、/ 添加形状按钮jf.add(jb14);jb14.setPreferredSize(new Dimension(22, 22);jb14.setActionCommand(多边.PNG);然后添加颜色按钮,这和添加形状按钮类似,只是颜色安妮中什么都不要放,只要设置一下按钮的背景颜色就可以了,也不要重新设置点击按钮时的监听信息。这样,颜色按钮就可以和形状按钮区分开来,点击按钮,当返回一个字符串时,就是形状按钮,当返回一个空字符串就是颜色按钮。接下来添加文本框用来显示信息。jla1= new JLabel(形状);jf.add(jla1);jte1 = new JTextField(8);jf.
14、add(jte1);jla2 = new JLabel(面积);jf.add(jla2);jte2 = new JTextField(8);jf.add(jte2);这个方法的最后一部分就是将这些按钮添加监听器,添加监听器的方法是先拿到监听器的对象,然后利用jb1.addActionListener(mouse)这个语句来添加监听器。由于监听是一个接口,因此我们不能直接new出监听器接口的对象,必须要先用一个子类来实现监听器接口,new出子类的对象,在这个语句中mouse就是一个实现了ActionListener接口的类的对象。在这个类中还有一个重绘的方法public void paint(G
15、raphics g),这个方法是JPanel 中的,在这里重写这个方法,在程序运行的时候,程序会自动调用这个方法。这个方法的作用是在我们移动后拉伸窗体的时候,我们画出的图形还是在那里不变。(2) 、Mouse.java前面我们也说了,监听器是一个接口,不能直接实例化,我们要先用一个子类来实现这个接口,因此,这个类的主要作用就是实现监听器接口。这个类共实现了以下三个监听器MouseListener,ActionListener,MouseMotionListener实现接口的时候就要重写接口中的抽象方法。首先我们看看按钮添加的动作监听器,我们要点击按钮,要获取一个返回值,根据这个返回值来做出不同
16、的反应。比如当我们点击矩形按钮时,我们的画笔就要能够画出一个矩形来,如果我们还点了红色按钮,那么,我们的画笔就要能画出一个红色矩形来。那么,怎么才能实现这些功能呢,这就是监听器中的抽象方法要做的事。动作监听器中比较简单,只需要获取按钮中的信心,如果是一个字符串,就不要管,留给另外两个监听器去处理。当返回一个空字符串时,就是动作监听器要处理的事了。返回空字符串表示点击的是颜色按钮,要将画笔的颜色设置为该按钮的背景色。因此首先要获取该按钮的背景色,然后将画笔设置为该颜色。public void actionPerformed(ActionEvent e) /动作监听器str = e.getActi
17、onCommand();if (.equals(str) JButton jb = (JButton) e.getSource();color = jb.getBackground();g.setColor(color);str = 直线.PNG; / 默认为直线当我们点击形状按钮时,就要画出各种形状的图形出来。当我们点击直线时,画笔要画出一条直线。前面说过JAVA中有画各种图形的方法,只需要我们去调用就可以了。JAVA中有直接画直线的方法,因此画直线比较简单。if (直线.PNG.equals(str) g.drawLine(x1, y1, x2, y2);Shape line = new
18、Shape(x1,x2,y1,y2,直线,color);/创建出一个Shape对象shapeindex+=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);Shape ju = new Shape(x1,x2,y1,y2,矩形,color);shapeindex = ju;/存下矩形index+;float s = Mat
19、h.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);Shape tuo = new Shape(x1,x2,y1,y2,椭圆,color);shapeindex+ = tuo;double s = 3.14*Math.abs(x1 - x
20、2)*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);Shape s1 = new Shape(x1,x2,y1,y2,三角形,color);shapeindex+ = 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);Shape s2 = new Shape(x,x1,y,y1,三角形,color);shapeindex+ = s2;g.drawLine(x0, y0, x1, y1);Shape s3 = new Shape(x0,x1,y0,y1,三角形,color);shapeindex+ = s3;double a,b,c,p,s;a = Math.sqrt(Math.abs(x1-x0)*Math.abs(x1-x0)+Math.abs
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论