画图应用程序设计与实现
第1部分 设计的内容要求
给出设计的内容与要求
1.1
编写Windows自带画图程序,编写Applet或Application,使用鼠标在屏幕上随意画图:直线,矩形,圆角矩形,椭圆、圆等。
1.2
功能要求:
1. 实现绘图中的各种图形的绘制
2. 实现菜单、工具按钮等,实现对色彩,字体的设置等
3. 鼓励添加更加新颖的特色功能
第2部分 设计思想
根据你系统的实现,给出系统实现主要思想,算法,采用的技术。
2.1 主要思想
使用面向对象的分析与设计方法进行分析设计。这个软件主要由两个类构成,分别是实现画图的JPanel类派生类mycanvas类和主界面的JFrame类派生类mywindow类。主界面使用mywindow类构造,将各个功能放在界面的工具栏内实现。画图部分通过使用mycanvas类里继承自JPanel类的paint函数,通过graphics类对象的各种draw函数实现绘画。
2.2 算法和采用的技术
(1)绘画种类的选择通过在mycanvas类里定义标志变量flag实现控制,mywindow界面工具栏中选择绘画种类的menu item点击后会修改mycanvas中的标志变量flag,然后print函数中根据flag的值画出指定类型的图形。
(2)因为要连续显示直线,所以需要不断调用repaint函数但是又要保留画布上原先绘画的内容,这里使用截图函数createScreenCapture()函数截取屏幕上的画布部分存储到Bufferedimage类中,在paint函数前添加drawimage()函数,先画之前保存的图片,实现重绘。
(3)在mycanvas类中添加mouselistener和mousemotionlistener两个监听器实时获取鼠标的位置,获取绘图的参数。
第3部分 详细设计
给出系统的详细设计。各个功能的详细实现过程,必须给出主要算法和重要函数的的流程图,流程图必须是正确的
3.1 流程图
Mywindow init函数流程图: Mywindow savepic函数流程图:
流程图1.2
流程图1.1
Paint函数流程图:
流程图1.3
第4部分 运行效果图
画曲线:类似刷子的功能可以自己拖动绘制曲线
图1.1
画直线:拖动绘制直线
图1.2
画圆:拖动绘制圆形
图1.3
画矩形:拖动绘制矩形
图1.4
写文字:点击后弹出弹窗,输入文字内容后,点击颜色,选择颜色然后在绘图区域内点击生成文字
图1.5
设置颜色:设置绘图的线条颜色和背景色
图1.6
第5部分 心得与体会
通过这个课程设计深入了解了swing包设计的界面开发和通过paint函数实现绘图的多种功能,在整个项目的设计过程中也遇到了一些问题,比如如何解决repaint函数会清空画布上之前的所有绘图,如何实时获取鼠标的位置实现连续划线,如何通过重画实现绘图的动态拖动过程。同时本次课程设计许多内容都是通过自己思考加上网查找相关博客内容进行学习得以解决,拓宽了Java学习的方式方法,体验了程序员在工作过程中真实的学习方法和过程。
画图应用程序设计与实现
importjava.awt.*;
importjava.awt.event.*;
importjavax.imageio.ImageIO;
importjavax.swing.*;
importjava.awt.event.MouseEvent;
importjava.awt.event.MouseListener;
importjava.awt.event.MouseMotionListener;
importjava.awt.image.BufferedImage;
importjava.io.File;
importjava.io.IOException;
class MyCanvasextends JPanel{ //定义画布
static int flag=0;
Color colorB=new Color(0,0,0);
Color colorF=new Color(255,255,255);
int x1,x2,y1,y2,r,a,b;
String temp="请输入内容";
Toolkit tool = this.getToolkit();
Image image;
Graphics2D gra;
BufferedImage myImage = null;
MyCanvas()
{
setBackground(colorB);
setSize(400,400);
x1=y1=x2=y2=a=b=r=0;
//savePic("C:\\Users\\qyjbo\\Desktop\\save.jpg");
this.addMouseListener(new MouseListener() {
public voidmouseEnte