java课程设计报告 简单绘画板

时间:2024.3.31

Java课程设计报告

      题目:         一个简单的绘画板             

      班级:                        

      学号:                           

      姓名:                                    

      指导老师:                             

      完成起止日期: 20##年12月7日  ——  20##年12月26日

目录

1、题目与要求······································ 3

      1.1、题目········································ 3

      1.2、参考文献···································· 3

2、功能描述········································ 4

3、设计思想与系统结构·······························5

      3.1、类设计·······································5

      3.2、结构图·······································6

4、用户界面·········································7

5、代码分析·········································8

6、实验总结·········································19

课程设计题目与要求

1.1 .课题题目

参考Windows附件中的绘图工具,使用Java语言设计并实现一个简单的绘图板。(界面使用AWT或SWING)

a)       实现各类基本图形的编辑

b)      实现文件的保存和读取功能。

1.2 .参考文献

1.《java编程思想》,机械工业出版社,1999年4月

2.《java项目设计与开发范例》,电子工业出版社,20##年4月,唐小军等

3.《java开放源码编程》,电子工业出版社,20##年1月,沃纳斯

4.《java程序设计》,清华大学出版社,20##年8月,雍俊海

功能描述

a)        画笔功能

程序实现画笔功能,可以拖动鼠标画任意曲线,曲线颜色可从调试板选择。

b)        直线功能

程序实现画直线功能,可以以任意点为起点,拖动鼠标画任意长的线段,线段颜色可由调试板选择。

c)        矩形功能

程序实现画矩形功能,可以以任意点为矩形的左上角端点,拖动鼠标画任意矩形,矩形颜色可由调试板选择。

d)       椭圆功能

程序实现画椭圆功能,可以以任意点为椭圆的左端边界,画任意椭圆,椭圆颜色可由调试板选择。

e)        调色板功能

程序实现调试板功能,可以选择画笔的颜色和填充图形的颜色。

f)         清除功能

程序实现清除画板功能,可以清除以前在画板上画的所有图形。

g)        文件保存

程序实现文件保存功能,可以保存画图文件,可以在以后继续编辑。

h)        文件打开

程序实现打开以前保存的画图文件的功能,可以打开以前保存的图片,继续编辑。

设计思想与系统结构

3.1.类设计

                        图3.1

3.2.结构图

                          图3.2

用户界面

                            图4.1

操作:画直线,曲线,圆,椭圆,矩形

                         图4.2

代码分析

import java.awt.*;

import java.awt.event.*;

import java.util.*;

import javax.swing.*;

import java.awt.geom.*;

import java.io.*;

public class Painting {

       public static void main(String args[]){

              new paintboard("画板");

       }

}

/**点*/

class Point implements Serializable //对象序列化接口

{

       int x,y;         //点坐标                                                                                                               

       Color col;         //颜色

       int tool;               //工具类型

       int boarder; //边界

       Point(int x, int y, Color col, int tool, int boarder)

       {

              this.x = x;

              this.y = y;

              this.col = col;

              this.tool = tool;

              this.boarder = boarder;

       }

}

/**画板*/

class paintboard extends Frame implements ActionListener,MouseMotionListener,MouseListener,ItemListener

{

       int x = -1, y = -1;

       int con = 1;//画笔大小

       int Econ = 5;//橡皮大小

       int toolFlag = 0;//toolFlag:工具标记

       /**toolFlag工具对应表:

       (0--画笔);(1--橡皮);(2--清除);

       (3--直线);(4--圆);(5--矩形);

       (6--撤销) */

       Color c = new Color(0,0,0); //画笔颜色

       BasicStrokesize=newBasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); //画笔粗细

       Point cutflag = new Point(-1, -1, c, 6, con);//截断标志

       Vector paintInfo = null;//点信息向量组

       int n = 1;

       FileInputStream picIn = null;

       FileOutputStream picOut = null;

       ObjectInputStream VIn = null;

       ObjectOutputStream VOut = null;

       // *工具面板--画笔,直线,圆,矩形,橡皮,清除*/

       Panel toolPanel; //画板组件

       JButton eraser, drLine,drCircle,drRect; //橡皮,画线,画圆,画矩形

       JButton clear ,pen; //清除,铅笔

       Choice SizeChoice,EraserChoice; //选择颜色,选择画笔大小,选择橡皮大小

       JButton colchooser; //调色板

       Label 大小B,大小E;

//保存功能

       JButton openPic,savePic; //打开,保存按钮

       FileDialog openPicture,savePicture; //打开,保存对话框

       paintboard(String s)

       {

              super(s);

              addMouseMotionListener(this);

              addMouseListener(this);

              paintInfo = new Vector(); //点信息向量组

              /*各工具按钮及选择项*/            

              //画笔大小选择

              SizeChoice = new Choice();

              SizeChoice.add("1");

              SizeChoice.add("3");

              SizeChoice.add("5");

              SizeChoice.add("7");

              SizeChoice.add("9");

              SizeChoice.add("11");

              SizeChoice.add("15");

              SizeChoice.add("19");

              SizeChoice.addItemListener(this); //事件监听

              //橡皮大小选择

              EraserChoice = new Choice();

              EraserChoice.add("2");

              EraserChoice.add("5");

              EraserChoice.add("9");

              EraserChoice.add("13");

              EraserChoice.add("17");

              EraserChoice.add("21");

              EraserChoice.add("25");

              EraserChoice.addItemListener(this); //事件监听

              toolPanel = new Panel();         

              Color bc=new Color(0,255,0);//JButton背景色

              clear = new JButton("清除");//清除

              //clear.setIcon(clearicon);

              clear.setBackground(bc);

              eraser = new JButton("橡皮");

              eraser.setBackground(bc);

              pen = new JButton("画笔");//画笔

              //pen.setIcon(penicon);

              pen.setBackground(bc);

              drLine = new JButton("直线");

              drLine.setBackground(bc);

              drCircle = new JButton("圆形");

              drCircle.setBackground(bc);

              drRect = new JButton("矩形");

              drRect.setBackground(bc);

              openPic = new JButton("打开");//打开

              //openPic.setIcon(openicon);

              openPic.setBackground(bc);

              savePic = new JButton("保存"); //保存

              //savePic.setIcon(saveicon);

              savePic.setBackground(bc);

              colchooser = new JButton("调色板");

              colchooser.setBackground(bc);

              //各组件事件监听

              clear.addActionListener(this);

              eraser.addActionListener(this);

              pen.addActionListener(this);

              drLine.addActionListener(this);

              drCircle.addActionListener(this);

              drRect.addActionListener(this);

              openPic.addActionListener(this);

              savePic.addActionListener(this);

              colchooser.addActionListener(this);

              Color lc=new Color(150,150,150);

              //颜色 = new Label("画笔颜色",Label.CENTER);

              //颜色.setBackground(lc);

              大小B = new Label("画笔大小",Label.CENTER);

              大小B.setBackground(lc);

              大小E = new Label("橡皮大小",Label.CENTER);

               大小E.setBackground(lc);

              //面板添加组件

              toolPanel.add(pen); //画笔

              toolPanel.add(drLine); //画直线

              toolPanel.add(drCircle); //画圆

              toolPanel.add(drRect); //画矩形

              toolPanel.add(大小B);//画笔大小标签

              toolPanel.add(SizeChoice); //画笔大小选项

              toolPanel.add(colchooser); //调色板

              toolPanel.add(eraser); //橡皮按钮

              toolPanel.add(大小E); //橡皮大小标签

              toolPanel.add(EraserChoice); //橡皮大小选项

              toolPanel.add(clear); //清除

              toolPanel.add(openPic); //打开

              toolPanel.add(savePic); //保存

              //工具面板添加到APPLET面板

              add(toolPanel,BorderLayout.NORTH);

              setBounds(0,0,1000,700);//画板边界大小

              setVisible(true);

              validate();

                     openPicture = new FileDialog(this,"打开",FileDialog.LOAD); //文件打开对话框

              openPicture.setVisible(false);

              savePicture = new FileDialog(this,"保存",FileDialog.SAVE); //文件保存对话框

              savePicture.setVisible(false);

              openPicture.addWindowListener(new WindowAdapter(){

                     public void windowClosing(WindowEvent e)

                     {openPicture.setVisible(false); }

              }

              ); //打开窗口事件监听

              savePicture.addWindowListener(new WindowAdapter()

              {

                     public void windowClosing(WindowEvent e)

                     { savePicture.setVisible(false); }

              }); //保存窗口事件监听

              addWindowListener(new WindowAdapter()

              {   public void windowClosing(WindowEvent e)

                     { System.exit(0);}

              }); //主程序窗口事件监听

       }

/**画图*/    

public void paint(Graphics g)

{

       Graphics2D g2d = (Graphics2D)g; //二维图形

       Point p1,p2; //点

       n = paintInfo.size(); //点的个数

       if(toolFlag==2)

              g.clearRect(0,0,getSize().width,getSize().height);//清除画板内容

       for(int i=0; i<n ;i++){

              p1 = (Point)paintInfo.elementAt(i);

              p2 = (Point)paintInfo.elementAt(i+1);

              size = new BasicStroke(p1.boarder,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);

              g2d.setColor(p1.col);

              g2d.setStroke(size);

              if(p1.tool==p2.tool) //判断点的类型

              {

                     switch(p1.tool)

                     {

                     case 0://画笔

                            Line2D line1 = new Line2D.Double(p1.x, p1.y, p2.x, p2.y);

                            g2d.draw(line1);

                            break;

                     case 1://橡皮

                            g.clearRect(p1.x, p1.y, p1.boarder, p1.boarder);

                            break;

                     case 3://画直线

                                   Line2D line2 = new Line2D.Double(p1.x, p1.y, p2.x, p2.y);

                                   g2d.draw(line2);

                                   break;

                     case 4://画圆

                            Ellipse2D ellipse = new Ellipse2D.Double(p1.x, p1.y, Math.abs(p2.x-p1.x) , Math.abs(p2.y-p1.y));

                            g2d.draw(ellipse);

                            break;

                     case 5://画矩形

                            Rectangle2D rect = new Rectangle2D.Double(p1.x, p1.y, Math.abs(p2.x-p1.x) , Math.abs(p2.y-p1.y));

                            g2d.draw(rect);

                            break;

                     case 6://截断,跳过

                            i=i+1;

                            break;

                     default :

                     }//end switch

              }//end if

       }//end for

}

/**事件处理*/

public void itemStateChanged(ItemEvent e)

{

        if(e.getSource()==SizeChoice)//画笔大小

       {

              String selected = SizeChoice.getSelectedItem();

              if(selected=="1")

              {

                     con = 1;

                     size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);

              }

              else if(selected=="3")

              {

                     con = 3;

                     size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);

              }

              else if(selected=="5")

              {con = 5;

              size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);

              }

              else if(selected=="7")

              {con = 7;

              size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);

              }

              else if(selected=="9")

              {con = 9;

              size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);

              }

              else if(selected=="11")

              {con = 11;

              size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);

              }

              else if(selected=="15")

              {con = 15;

              size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);

              }

              else if(selected=="19")

              {con = 19;

              size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);

              }

       }

       else if(e.getSource()==EraserChoice)//橡皮大小

       {

              String Esize = EraserChoice.getSelectedItem();

              if(Esize=="2")

              { Econ = 2*2; }

              if(Esize=="5")

              { Econ = 5*2; }

              else if(Esize=="9")

              { Econ = 9*2; }

              else if(Esize=="13")

              { Econ = 13*2; }

              else if(Esize=="17")

              { Econ = 17*2; }

              else if(Esize=="21")

              { Econ = 21*2; }

              else if(Esize=="25")

              { Econ = 25*2; }

       }

}

/** 单击鼠标拖动 ,画笔,橡皮 */

public void mouseDragged(MouseEvent e)

{

       Point p1 ;

       switch(toolFlag){

       case 0://画笔

              x = (int)e.getX();

              y = (int)e.getY();

              p1 = new Point(x, y, c, toolFlag, con);

              paintInfo.addElement(p1);

              repaint();

              break;

       case 1://橡皮

              x = (int)e.getX();

              y = (int)e.getY();

              p1 = new Point(x, y, null, toolFlag, Econ);//用无色的点重新覆盖掉以前的点

              paintInfo.addElement(p1);

              repaint();

              break;

       default :

       }

}

/**鼠标移动*/

public void mouseMoved(MouseEvent e) {}

/**更新*/

public void update(Graphics g)

{

       paint(g);

}

/**单击鼠标拖动,画直线,画圆,画矩形*/

public void mousePressed(MouseEvent e)

{

       Point p2;

       switch(toolFlag){

       case 3://直线

              x = (int)e.getX();

              y = (int)e.getY();

              p2 = new Point(x, y, c, toolFlag, con);

              paintInfo.addElement(p2);

              break;

       case 4: //圆

              x = (int)e.getX();

              y = (int)e.getY();

              p2 = new Point(x, y, c, toolFlag, con);

              paintInfo.addElement(p2);

              break;

       case 5: //矩形

              x = (int)e.getX();

              y = (int)e.getY();

              p2 = new Point(x, y, c, toolFlag, con);

              paintInfo.addElement(p2);

              break;

       default :

       }

}

/**鼠标释放*/

public void mouseReleased(MouseEvent e)

{

       Point p3;

       switch(toolFlag){

       case 0://画笔

              paintInfo.addElement(cutflag); //截断画笔

              break;

       case 1: //橡皮

              paintInfo.addElement(cutflag); //截断橡皮

              break;

       case 3://直线

              x = (int)e.getX();

              y = (int)e.getY();

              p3 = new Point(x, y, c, toolFlag, con);

              paintInfo.addElement(p3);

              paintInfo.addElement(cutflag);

              repaint();

              break;

       case 4: //圆

              x = (int)e.getX();

              y = (int)e.getY();

              p3 = new Point(x, y, c, toolFlag, con);

              paintInfo.addElement(p3);

              paintInfo.addElement(cutflag);

              repaint();

              break;

       case 5: //矩形

              x = (int)e.getX();

              y = (int)e.getY();

              p3 = new Point(x, y, c, toolFlag, con);

              paintInfo.addElement(p3);

              paintInfo.addElement(cutflag);

              repaint();

              break;

       default:

       }

}

public void mouseEntered(MouseEvent e){}

public void mouseExited(MouseEvent e){}

public void mouseClicked(MouseEvent e){}

/**动作事件处理*/

public void actionPerformed(ActionEvent e)

{

       if(e.getSource()==pen)//画笔

       {toolFlag = 0;}

       if(e.getSource()==eraser)//橡皮

       {toolFlag = 1;}

       if(e.getSource()==clear)//清除

       {

              toolFlag = 2;

              paintInfo.removeAllElements();

              repaint();

       }

       if(e.getSource()==drLine)//画线

       {toolFlag = 3;}

       if(e.getSource()==drCircle)//画圆

       {toolFlag = 4;}

       if(e.getSource()==drRect)//画矩形

       {toolFlag = 5;}

       if(e.getSource()==colchooser)//调色板

       {

              Color newColor = JColorChooser.showDialog(this,"调色板",c);

              c = newColor;

       }

       if(e.getSource()==openPic)//打开图画

       {

              openPicture.setVisible(true);

              if(openPicture.getFile()!=null)

              {

                     int tempflag;

                     tempflag = toolFlag;

                     toolFlag = 2 ;

                     //paintInfo.removeAllElements();//移除所有点的信息

                     //repaint(); //清除画板内容

                     try{

                            paintInfo.removeAllElements();//移除所有点的信息

                            repaint(); //清除画板内容

                            File filein = new File(openPicture.getDirectory(),openPicture.getFile()); //打开文件

                            picIn = new FileInputStream(filein);

                            VIn = new ObjectInputStream(picIn);

                            paintInfo = (Vector)VIn.readObject(); //依次将文件中的点信息读入到点向量组中

                            VIn.close();

                            repaint(); //重绘点

                            toolFlag = tempflag;//工具类型恢复为载入文件之前的状态

                     }

                     catch(ClassNotFoundException IOe2) //捕获文件类型不正确异常

                     {

                            repaint();

                            toolFlag = tempflag;

                            System.out.println("can not read object");

                     }

                     catch(IOException IOe) //捕获文件无法读取异常

                     {

                            repaint();

                            toolFlag = tempflag;

                            System.out.println("can not read file");

                     }

              }

       }

       if(e.getSource()==savePic)//保存图画

       {

              savePicture.setVisible(true);

              try{

                     File fileout = new File(savePicture.getDirectory(),savePicture.getFile()); //保存文件

                     picOut = new FileOutputStream(fileout);

                     VOut = new ObjectOutputStream(picOut);

                     VOut.writeObject(paintInfo); //将点向量组中的点信息写入对象输出流

                     VOut.close();

              }

              catch(IOException IOe) //捕获文件写入异常

              {

                     System.out.println("can not write object");

              }

       }

}

}//end paintboard

课程设计总结

作为一名计算机科学与技术专业的的学生,我觉得能做类似的课程设计是十分有意义,而且是十分必要的。在已度过的大三的时间里我们大多数接触的是专业基础课。我们在课堂上掌握的仅仅是专业基础课的理论面,如何去锻炼我们的实践能力?如何把我们所学到的专业基础理论知识用到实践中去呢?我想做类似的大作业就为我们提供了良好的实践平台。在做本次课程设计的过程中,我感触最深的当数查阅大量的书籍了。为了让自己的设计更加完善,更加符合软件工程标准,一次次翻阅各种参考资料是十分必要的,同时也是必不可少的。作为一名专业学生掌握一门或几门程序设计语言是必不可少的,由于本次课程设计要求用java进行开发,在这过程中我对各种的开发环境进行了探索并且在学习的过程中带着问题去学我发现效率很好,记得大一学c语言好难就是因为我们没有把自己放在使用者的角度,单单是为了学而学,这样效率当然不会高。边学边用这样才会提高效率,这是我作本次课程设计的又一个收获。但是由于本人水平有限,难免会有错误,还望老师批评指正。

更多相关推荐:
java课程设计报告范例

河北科技大学课程设计报告学生姓名祝冬冬学号专业班级计算机科学与技术课程名称学年学期指导教师2011年6月课程设计成绩评定表目录示例一二三1234四五设计题目1设计目的1设计原理及方案1使用的软件工具和环境1需求...

Java课程设计报告模板

Java程序设计课程设计报告20xx20xx年度第1学期Hannio塔专业学生姓名班级学号指导教师完成日期计算机科学技术网络工程马千里B计算机1021010704213徐森20xx年1月8日Hannoi塔目录目...

Java课程设计报告

安阳工学院计算机学院JAVA课程设计报告蜘蛛纸牌游戏专业班级09级网络工程2班学生姓名李瑞琳学生学号20xx03060016小组成员司慧晓郑亚楠司小婷杨达允指导教师姓名宋强目录1选题目的与系统概述32系统可行性...

java课程设计报告

黄淮学院JAVA课程设计报告题目:《日记本的设计与实现》课程设计学院:信息工程学院姓名:学号:专业:软件工程班级:软工1101B班指导教师:二0##年十二月目录1.引言...32.设计目的与任务...43.设计…

java课程设计报告书

java程序设计与应用开发Java课程设计报告书题目学籍管理系统班级数媒学号姓名教师20xx年12月24日1java程序设计与应用开发学籍管理系统一课程设计的目的与要求一课程设计目的与任务随着社会的发展及互联网...

Java课程设计报告【模板】

课程设计报告设计题目专业计算机科学与技术班级101学号20xx16021127学生姓名李贵云指导教师布瑞琴起至时间12161223教师评分20xx年月日目录1概述11目的这学期我们学习了Java语言Java语言...

java课程设计报告—计算器

1计算器Java实习报告目录一课程设计目的2二课程设计任务221设计任务222课程设计要求223需求分析2三开发工具与平台331开发工具332开发平台3四设计思路441界面设计4421逻辑设计4422程序流程图...

java课程设计报告-聊天室

JAVA程序设计课程设计报告班级计0902学号12姓名李兴华指导教师蔚承建完成日期20xx1226课程设计报告书专用纸一题目内容的描述本文围绕Java编程语言在网络编程方面的具体应用论述了使用面向对象方法对计算...

Java语言课程设计报告

摘要随着电子信息时代的飞速发展Internet应用在全球范围内日益普及当今社会正快速向信息化社会前进信息自动化的作用也越趋重要更大的自动化软件可以使我们从繁杂的事务中获得轻松提高了我们的工作效率图书管理系统更加...

Java oracle数据库课程设计报告

南阳理工学院数据库程序设计课程设计报告课题姓名学号同组姓名专业班级指导教师设计时间20xx年6月目录1开发背景32系统描述33数据分析431数据流图432数据字典44概念模型设计941ER图95逻辑模型设计及优...

大学《程序设计语言(Java)》课程实验报告

昆明理工大学程序设计语言Java课程实验报告学院名称专业年级学生姓名学号联系电话Email20xx年6月1日

java课程设计报告—万年历——詹永堂

Java程序设计课程设计报告题目万年历学院计算机科学与工程学院专业信息管理与信息系统学生姓名学号1100340129指导教师汪华登20xx年6月30日目录目录前言21需求分析211需求分析212功能设计22概要...

java 课程设计报告(32篇)