java画图板课程设计

合集下载

《Java课程设计项目汇报PPT课件》

《Java课程设计项目汇报PPT课件》

项目总结与展望
在项目开发完成后,我们将对项目整体进行总结和评估,并提出改进意见和 展望未来的发展方向。通过项目实践,我们相信每个参与者都能够获得丰富 的经验和收获。
展示与演示
我们将通过展示和演示的方式,向大家展示项目的各个功能模块和界面设计,演示系统的使用流程和操作方法, 以便观众更好地理解和学习。
数据库设计
数据库设计是项目的重要一环,通过设计合理的表结构和约束条件,保证数据的一致性和完整性。本项目中将 使用MySQL数据库,并设计相应的表结构来存储数据。
界面设计
在界面设计中,我们将注重用户体验,力求设计简洁、美观的界面,并提供友好的操作方式。通过优秀的界面 设计,提高用户的使用体验和满意度。
代码实现技术与方法
为了实现本项目的各个功能模块,我们将采用Java技术和相关框架,如Spring、Hibernate等。同时,我们将遵 循面向对象的设计原则,保证代码的可读性和可维护性。
测试方案
在项目实施过程中,我们将采用不同的测试方法,包括单元测试、功能测试 和用户验收测试,以确保系统的功能和性能均达到设计要求。
功能实现:注册与登录模块
注册与登录模块是用户使用系统的基础功能,通过用户身份验证,确保只有 合法用户能够访问系统,保护数据的安全性。
功能实现:数据录入与管理模块
数据录入与管理模块提供了录入数据和管理数据的功能,用户可以方便地添加、编
功能实现:数据查询与统计模 块
互动交流与答疑
在展示和演示之后,我们将开展互动交流环节,让观众提问和发表意见,我们将耐心解答观众的疑问,并与大 家进行深入的讨论和交流。
参考文献与致谢
在项目过程中,我们参考了大量的文献和资料,并受到了许多人的帮助和支持,在此向所有给予帮助的人表示 衷心的感谢。

2024版年度Java程序设计全套课件完整版

2024版年度Java程序设计全套课件完整版

•课程介绍与预备知识•基础语法与程序结构•面向对象编程基础目•常用类库与工具使用•图形用户界面开发录•网络编程与数据库连接•多线程编程技术•设计模式与架构思想目•课程总结与展望录Java语言概述及发展历程Java语言的起源与特点01Java的发展历程02Java的应用领域03编程环境搭建与工具选择JDK的安装与配置开发工具的选择Maven的使用编写HelloWorld 程序带领学员编写并运行第一个Java 程序,了解Java 程序的基本结构。

程序解析详细讲解HelloWorld 程序的每一行代码,让学员了解Java 程序的执行流程。

常见问题与解决方法针对初学者在编写和运行Java 程序时可能遇到的问题,提供解决方案。

第一个Java 程序示例030201介绍Java 中的基本数据类型(如int 、float 、char 等)和引用数据类型(如类、接口等)。

Java 中的数据类型变量的声明与赋值运算符的使用类型转换讲解如何在Java 中声明变量、为变量赋值以及变量的作用域。

介绍Java 中的算术运算符、关系运算符、逻辑运算符等,以及运算符的优先级和结合性。

详细讲解Java 中的自动类型转换和强制类型转换,以及转换过程中可能遇到的问题。

数据类型、变量和运算符根据特定条件执行不同代码块。

if 条件语句根据表达式的值选择执行多个代码块中的一个。

switch 语句简洁的if-else 结构,用于条件判断并返回结果。

三目运算符分支结构循环结构for循环while循环do-while循环一维数组存储表格形式数据,可通过多个下标访问元素。

多维数组数组排序数组查找01020403在数组中查找指定元素,并返回其下标或位置信息。

存储相同类型数据的线性结构,可通过下标访问元素。

使用排序算法对数组元素进行排序,如冒泡排序、选择排序等。

数组及其应用方法定义指定方法名、参数列表和返回类型,编写方法体实现特定功能。

方法调用通过方法名和参数列表调用已定义的方法,执行其功能并获取返回值。

Java画图工具——Graphics2D

Java画图工具——Graphics2D

Java画图⼯具——Graphics2D1.使⽤import com.google.zxing.BarcodeFormat;import com.google.zxing.EncodeHintType;import com.google.zxing.MultiFormatWriter;import com.google.zxing.client.j2se.MatrixToImageWriter;import mon.BitMatrix;import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;import javax.imageio.ImageIO;import java.awt.*;import java.awt.image.BufferedImage;import java.io.*;import .URL;import java.util.HashMap;import java.util.Map;public class TestGraphics2D {public static void main(String[] args) throws Exception {//从本地读取图⽚String path = "E://tmp/timg.jpg";BufferedImage backImage = ImageIO.read(new File(path));//⽣产画板Graphics2D graphics = backImage.createGraphics();//抗锯齿graphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);//去⽂字锯齿graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);//去图⽚锯齿//⽣成并绘制⼆维码ByteArrayOutputStream pngOutputStream = new ByteArrayOutputStream();createQR("", pngOutputStream);BufferedImage image = ImageIO.read(new ByteArrayInputStream(pngOutputStream.toByteArray()));graphics.drawImage(image, 50, 50, 100, 100, null);//读取url图⽚并绘制String url = "https:///timg?image&quality=80&size=b9999_10000&sec=1571378016581&di=31ba635c011b8a7179fb19da7f7a2bd3&imgtype=0&src=http%3A%2F%%2Fimage%2Fpf%2Fus%2Fr30%2FPu BufferedImage drawImage = ImageIO.read(new URL(url));graphics.drawImage(drawImage,50,200,100,100, null);//绘制⽂字String ttfPath = "E://tmp/Francis.ttf";Font font = Font.createFont(Font.TRUETYPE_FONT, new File(ttfPath));font = font.deriveFont(Font.PLAIN,34);// Font font = new Font("楷体", Font.BOLD, 34);graphics.setColor(Color.BLACK);graphics.setFont(font);graphics.drawString("Hello World !", 200, 200);//保存图⽚到本地String resultPath = "E://tmp/back.jpg";ImageIO.write(backImage, "PNG", new File(resultPath));}//⽣成⼆维码public static void createQR(String codeContent, OutputStream out) throws Exception {//⼆维码参数Map<EncodeHintType, Object> hints = new HashMap<>();hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");//设置字符编码类型hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);//设置纠错等级L/M/Q/H,纠错等级越⾼越不易识别hints.put(EncodeHintType.MARGIN, 1);//设置⼆维码边距,单位像素,值越⼩⼆维码距离四周越近//⽣成⼆维码,写⼊输出流BitMatrix bitMatrix = new MultiFormatWriter().encode(codeContent, BarcodeFormat.QR_CODE, 150, 150, hints);MatrixToImageWriter.writeToStream(bitMatrix, "PNG", out);}}2.⽂字居中//⽂字居中String outMsg = "This is center !";FontMetrics fontMetrics = graphics.getFontMetrics(font);int textWidth = fontMetrics.stringWidth(outMsg);// ⽂字宽度int centerX = backImage.getWidth() / 2;// 计算出中⼼点 x 位置graphics.drawString(outMsg, centerX - textWidth / 2, 400);3.注意: a.原点统⼀在画板左上⾓,绘制的图⽚和⽂字都位于第四象限。

JAVA -- GUI设计报告

JAVA -- GUI设计报告

《Java程序设计》大作业报告题目:JA V A综合应用物联网学院电信1102 专业学号0703110220学生姓名曹晓桂指导教师张景莉评定成绩二〇一四年十二一、设计要求1、目的要求学生运用Java集成开发工具(如:JCREATOR、Eclipse等),独立编写一个综合应用程序,使学生能够通过实践,将面向对象程序设计的理论、技术、方法和Java语言相结合,熟练使用Java类库进行一些较为复杂实例的应用系统程序设计,包括GUI设计、输入输出流、异常处理和Web应用程序设计等。

2 、开发环境1.系统环境:Windows 7系统1. jdk版本:jdk1.7.0_602.集成开发环境:JCREATOR3、设计要求:创建一个GUI界面,运用一个包含2个选项卡的选项卡面板,实现以下功能:⑴“自我介绍”选项卡:显示设计者的个人信息,包括学号、姓名、本人的两张不同的照片(至少一张为单人照)和英文自我简介(不得少于50个单词),然后在一个弹出的信息窗口中显示自我简介的字数。

⑵“文件测试”选项卡:对用户输入的一个名称进行判断,名称由文本框输入。

如果是一个文件名,则输出该文件相关属性(文件名、绝对路径和文件的长度等)。

如果是一个目录,则输出该目录下的对象个数。

如该名称不存在,则以此名称为名在当前目录下创建一个文件,内容自定。

二、设计思路1、设计思路根据老师给的设计要求,确定了如下的设计思路:⑴首先在JFrame窗口中创建一个JTabbedPane选项卡面板⑵在选项卡面板里创建2个选项卡,分别为“自我介绍”,“文件测试”。

⑶在面板里分别添加三个子面板,位于每个面板的上中下。

⑷根据设计要求在各子面板上添加组件。

⑸给按钮添加事件响应。

⑹测试功能是否实现,检查有无明显缺陷。

三、实现代码和运行结果1、实现过程和代码import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.io.*;import java.util.StringTokenizer;public class JTabbedPaneDemo extends JFrame{private JLabel name,number,clabel,dlabel,name2;private JTextField nameText,numberText,cText,dText,name2Text;private JTextArea textArea1,textArea2;private JButton showButton,analyseButton,testButton, writeButton,emptyButton;private File file;private String str = new String("Hi boys and girls."+"\n"+"My name is caoxiaogui,I am from Nantong!"+"\n"+"I am a student from jiangnan university and my major is electronic information engineering "+"\n"+" I spend most of my time on study and I like play pingpang. "+"\n"+"I have acquired basic knowledge of my major during my school time. "+"\n"+"That is all.Thank you!");public static void main(String[] args) {new JTabbedPaneDemo().setVisible(true);//设置组建可视}public JTabbedPaneDemo(){ super("曹晓桂0703110220作业");//给窗口标题命名JTabbedPane tabbedPane=new JTabbedPane();//创建panel1JLabel label1=new JLabel("firstPane",SwingConstants.CENTER);JPanel firstPane = new JPanel();firstPane.setLayout(new BorderLayout());tabbedPane.addTab("自我介绍",null,firstPane,"First Panel");//分别添加3个子面板JPanel[] panel = new JPanel[3];panel[0] = new JPanel();panel[1] = new JPanel();panel[2] = new JPanel();firstPane.add(panel[0], BorderLayout.NORTH);firstPane.add(panel[1], BorderLayout.CENTER);firstPane.add(panel[2], BorderLayout.SOUTH);//创建姓名,学号标签及文本框并添加name=new JLabel("学号:");nameText=new JTextField(10);nameText.setEditable(false);number=new JLabel("姓名");numberText=new JTextField(10);numberText.setEditable(false);panel[0].add(number);panel[0].add(numberText);panel[0].add(name);panel[0].add(nameText);//创建图像标签,对象,设置标签相对于图像的位置并添加Icon bug1 = new ImageIcon("生活照.jpg");clabel = new JLabel("照片1:",bug1,SwingConstants.LEFT); clabel.setHorizontalTextPosition(SwingConstants.CENTER); clabel.setVerticalTextPosition(SwingConstants.BOTTOM); Icon bug2 = new ImageIcon("生活照.jpg");dlabel = new JLabel("照片2:",bug2,SwingConstants.RIGHT); dlabel.setHorizontalTextPosition(SwingConstants.CENTER); dlabel.setVerticalTextPosition(SwingConstants.BOTTOM); textArea1=new JTextArea(6,45);panel[1].add(clabel);panel[1].add(textArea1);panel[1].add(dlabel);//创建按钮并给按钮添加事件响应showButton=new JButton("show");showButton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {showMessage();}});analyseButton=new JButton("analyse");analyseButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {showWordNumber();}});panel[2].add(showButton);panel[2].add(analyseButton);//创建panel2JLabel label2=new JLabel("secondPane",SwingConstants.CENTER); JPanel secondPane=new JPanel();secondPane.setLayout(new BorderLayout());tabbedPane.addTab("文件测试",null,secondPane,"Second Panel"); //分别添加3个子面板JPanel[] panel2 = new JPanel[3];panel2[0] = new JPanel();panel2[1] = new JPanel();panel2[2] = new JPanel();secondPane.add(panel2[0], BorderLayout.NORTH); secondPane.add(panel2[1], BorderLayout.CENTER); secondPane.add(panel2[2], BorderLayout.SOUTH);//创建标签及文本框并添加name2=new JLabel("请输入名称:");name2Text = new JTextField();name2Text.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){if(!name2Text.getText().equals(""))testButton.setEnabled(true);}});name2Text.setColumns(20);panel2[0].add(name2);panel2[0].add(name2Text);textArea2=new JTextArea(6,45);panel2[1].add(textArea2);testButton = new JButton("test");writeButton = new JButton("write");writeButton.setEnabled(false);emptyButton = new JButton("empty");panel2[2].add(testButton);panel2[2].add(writeButton);panel2[2].add(emptyButton);testButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {testAction();}});writeButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {writeAction();}});emptyButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {emptyAction();}});getContentPane().add(tabbedPane);setSize(800,300);//设置窗口大小setVisible(true);}//显示信息与照片public void showMessage() {numberText.setText("0703110220");nameText.setText("曹晓桂");textArea1.setText(str);}//分析自我介绍的英文字数public void showWordNumber() {int wordNum = 0;String str = textArea1.getText();StringTokenizer st = new StringTokenizer(str);while (st.hasMoreElements()) {st.nextElement();wordNum++;}JOptionPane.showMessageDialog(null, "曹晓桂,您的简历字数为:" + wordNum, "简历字数统计",JOptionPane.PLAIN_MESSAGE);}//文件测试的实现public void testAction() {String str = name2Text.getText();if (!str.equals("")) {file = new File(str);if (file.isFile()) {String path = file.getAbsolutePath();String length = file.length() + "B";textArea2.setText("这是一个文件,其相关属性为:File Name: "+ file.getName() + "\n" + "Path: " + path + "\n"+ "Length: " + length);} else if (file.isDirectory()) {String[] fileName = file.list();textArea2.setText("这是一个目录,它下面有" + fileName.length+ "个对象。

Java标准教程:Java 2D绘图--第1章 Java 2d API概念概述

Java标准教程:Java 2D绘图--第1章 Java 2d API概念概述

Java标准教程:Java 2D绘图--第1章Java 2d API概念概述Java 2D API通过扩展抽象窗口工具箱(AWT),为Java程序提供了二维图像,文本和图形的功能。

这个复杂的渲染包支持线形图像,文本和图形,为富用户界面,复杂绘图程序和图像处理器开发者提供灵活的,功能强大的框架。

Java 2D对象出现在一个平面中,称为用户坐标系空间,和设备坐标系空间。

当对象在屏幕或打印机中渲染时,用户空间坐标系被转换成设备空间坐标系。

以下链接可以在开始学习Java 2D API时是很有用的:●Graphics●Graphics2DJava 2D API提供了以下功能:●为设备和打印机展示统一的渲染模型。

●大量基本集合图形,例如曲线,矩形,椭圆,以及渲染任何集合图形的渲染技术。

●在图形,文本和图像中执行撞击检测。

●一个复杂的模型,提供了控制如何渲染重叠对象。

●增强型的颜色支持。

●使用渲染提示控制渲染的质量。

这些主题在以下章节中进行介绍:●Java 2D 渲染●基本集合图形●文本●图像●打印1.1 坐标系Java 2D API维护两个坐标系空间。

●用户空间:指定基本图形的空间。

●输出设备的坐标系,例如屏幕,窗口或打印机。

用户空间是独立于设备的逻辑坐标系,坐标系空间是您的应用程序使用的。

所有传递到Java 2D渲染流程中的几何图形都使用用户空间坐标系指定。

当使用从用户空间到设备空间的转换时,原有的用户空间是组件绘制空间的左上角。

X轴向右增加,y轴向下增加,和下图中展示的一致。

窗体的左上角时(0, 0)。

所有的坐标系都是用整数表示,通常是足够的。

然而一些情况下需要浮点甚至double精度的坐标,也是支持的。

1.2 Java 2D渲染Java 2D API为不同类型的设备提供了统一的渲染模型。

在应用程序级别,不管设备是屏幕还是打印机,渲染流程是一样的。

当组件需要展示时,它的paint 或update方法会在合适的Graphics是上下文中被自动调用。

《JAVA程序设计》授课教案

《JAVA程序设计》授课教案

《JAVA程序设计》授课教案在Java中,异常也是被视为对象,所有的异常都继承于Throwable类,Throwable 类中有一个String类型的变量,它保存的是异常对象的一些说明信息,该信息可以用来识别所抛出的异常。

Throwable类分别有两个子类,分别是:Exception类和Error类,但对于软件开发者来说,大多数遇到的异常对象都属于Exception类及其相应的子类,这是因为Exception类型的异常是由编写的代码所引起的,而Error类型的异常则是由Java 虚拟机自身或者虚拟机与代码之间的连接引起的。

以下给出一个简化的Java异常继承关系图。

---------- Error I—lOExceptionThrowable <]-------- ------ ---------- -------------------------------------Exception R--------- RuntimeException」|用户自定义异常Exception类的子类的分类:Exception类的子类可以分为两种类弄,即checked 和unchecked。

其中unchecked类型的异常是指那些没有被检查出来的异常,它的抛出一般是由代码编写者的疏忽大意引起的。

checked类型的异常指的是那些代码编写没有问题,但是在代码的实际运行期间,由于代码所处环境的影响而抛出的异常。

4、学习异常处理关键字:try、catch、finally、throws 和throw。

1)、通过对比分析程序ExceptionExam.java 和ExceptionExam1.java,弓|入try—-catch语句,并阐述Java中异常的处理机制。

2)、通过走读ExceptionExamLjava中的代码,引导学生了解try ----- catch语句的执行步骤。

3)、如果程序出现非常严重的异常而导致程序完全退出,势必会给系统带来一些不确定的因素,Java提供了finally语句,不管抛出异常与否,都必须执行finally 语句块,通常在finally语句中可以进行资源的清除工作,如关闭打开的文件等。

Java程序设计与案例课程设计

Java程序设计与案例课程设计

Java程序设计与案例课程设计一、引言Java作为一种开放源代码的高级程序设计语言,在大数据、云计算、物联网、人工智能等领域中得到了广泛的应用。

因此,Java编程语言成为了计算机专业学生的必修课程之一。

针对Java程序设计这一课程,本文将介绍Java程序设计与案例课程设计的相关知识点,并重点探讨Java的面向对象编程。

二、Java程序设计知识点概述Java编程语言是一种基于类和对象的编程语言。

Java程序设计需要掌握以下知识点:2.1 数据类型Java中有八种基本数据类型:byte、short、int、long、float、double、char、boolean。

需要注意的是,不同数据类型所占的内存空间是不同的。

2.2 操作符Java中支持多种操作符,包括算术运算符、关系运算符、逻辑运算符等。

2.3 流程控制语句Java中有三种主要的流程控制语句:if语句、for循环语句、while循环语句,还有其他语句如switch语句、break语句、continue语句等。

2.4 函数Java中的函数称为方法,使用方法参数和返回值来传递和处理数据。

Java中的方法可以分为两种类型:实例方法和类方法。

2.5 数组Java中数组是存储同一类型数据的集合,常用于存储一组数据。

数组下标从0开始。

2.6 面向对象编程Java是面向对象编程语言,支持封装、继承和多态等概念。

三、Java面向对象编程3.1 类和对象类是一个抽象的概念,它描述了一系列对象的共同属性和行为。

而对象则是具体存在的,是类的实例。

Java中的类和对象可以使用关键字class和new来定义和实例化。

3.2 继承Java中的继承是指子类继承父类的属性和方法。

子类可以继承父类的公有属性和方法,而无法继承私有属性和方法,但可以通过公有的getter和setter方法访问私有的属性。

3.3 多态多态是指对象在不同的情况下具有不同的行为。

多态可以通过方法的重载和方法的重写来实现。

Java课程设计连连看游戏(含代码)

Java课程设计连连看游戏(含代码)

Java程序课程设计任务书一、主要任务与目标1、了解图形用户界面的概念;2、了解AWT的基本体系结构,掌握窗口的基本原理;3、掌握几种布局管理器的使用方法;4、掌握java的事件处理机制;5、了解Swing的基本体系结构,掌握Swing组件的使用方法;6、掌握java小程序的工作原理和使用方法;7、该游戏还将设置退出,再来一局按钮,并实现相应的功能。

8、设计一个用户注册登录界面二、主要内容与基本要求游戏规则是模仿网络上普通的连连看游戏,主要是鼠标两次点击的图片能否消去的问题。

当前,前提是点击两张相同的图片,若点击的是同一张图片或者两张不同的图片,则不予处理。

在两张想同图片所能连通的所有路径中,如果存在一条转弯点不多于两个的路径,就可以消去;如果没有,则不予处理。

该游戏由30张不同的图片组成,游戏开始将会出现30张随机组合的图片,在规则下点击两张相同的图片后图片将会消失。

图片全部消完为游戏成功。

游戏还将设置退出,再来一局的按钮,和倒计时的功能,方便用户进行操作。

并且有一个用户登录注册界面,玩家必须登录以后才可以进行游戏。

三、计划进度12月28日~ 12月29日:课程设计选题,查找参考资料12月30日~ 12月31日:阅读参考书籍,收集资料,完成需求分析1月1日~ 1月3日:系统的代码设计及实现,数据库设计与实现1月4日~ 1月5日:系统的调试,修改,完善1月6日~ 1月7日:完成课程设计报告,准备答辩四、主要参考文献[1] 刘宝林.Java程序设计与案例习题解答与实验指导[M].[2] 王鹏何云峰.Swing图形界面开发与案例分析[M].[3](美)Karl Avedal , Danny Ayers, Timothy Briggs. JSP编程指南[M]. 电子工业出版社, 2004,47-125.[4](美)Mark Linsenbardt. JSP在数据库中的应用与开发[M]. 希望电子出版社,2005,210-236.[5] Dianne Phelan,Building a simple web database application[C].IEEE InternationalProfessional Communication Conference, 2004, 79-86.[6](美)Karl Avedal,Danny Ayers,Timothy Briggs.JSP编程指南[M].电子工业出版社,2006,47-125.[7] Dianne Phelan,Building a simple web database application[C].IEEE InternationalProfessional Communication Conference, 2005, 79-86.[8] Altendorf. Eric, Hohman. Moses, Zabicki. Roman. Using J2EE on a large,web-based project[J]. IEEE Software.2002,19(02):81-89.摘要当今社会,休闲型游戏越来越得到人们的喜爱,我所做的毕业设计实例“连连看游戏的设计与实现”是近几年来网络上非常流行的一种二维休闲游戏,它对电脑配置要求不高,娱乐性强,易于上手。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机与信息工程系《程序设计》课程设计画图板承德石油高等专科学校摘要:本程序通过调用提供的,,等基本类进行了简单的界面设计,运用了中类的继承特性实现了对父类方法的调用,并多次使用语句实现绘图菜单的选择,运用了适配器类简化了监听器类的重写工作。

关键字:、1. 课程设计介绍本程序完成的是一个类似于画图板的绘图程序。

由于不是开发和设计专业的绘图和图像制作软件,所以,完成的程序的简单功能包括以下几项:1.新建一个空白图形文件:用于绘制新的图形。

2.打开或保存一个图形文件,便于对图形文件的管理。

3.绘制一些基本的画图组件:直线、矩形、实心矩形、椭圆、实心椭圆、圆、实心圆、圆角矩形、实心圆角矩形等。

4.可以用鼠标在绘图面板上单击拖动进行随笔画。

5.橡皮擦:可以将已绘制好的图形擦掉。

6.添加文字:可以在绘图区域内添加文字。

7.选择文字的字体:通过一个下拉式的选择条,可以选中所需要的字体。

本程序中包括:宋体、隶书、华文彩云、仿宋2312、华文行楷、方正舒体、、、、、。

当然,在下面的的程序分析中可以看到,由于我们灵活设置了字体数组,是的可以随意添加系统支持的任何字体。

大大方便和简化了程序设计。

8.选择文字的字体风格:通过两个复选框按钮,可以选择需要的字体风格,包括:粗体、斜体,使用者有三种选择方式,包括:①同时选中两者、②只选择其中一种、③两者都不选中。

9.设置画笔的颜色:可以选择当前绘制图形的画笔颜色,让图形更加丰富多彩、生动活泼。

10.设置画笔的粗细:该选项在作用于基本图形组件和文字时,它的效果是不一样的。

①当作用于绘制图形组件时,它的作用是改变画笔绘制线条的粗细;②当作用于文字时,它的作用是改变文字的大小。

2.系统设计2.1 需求分析用过微软操作系统的人一定都对自带的画图板非常的熟悉。

同图像处理软件界的“大哥大”比起来,它虽然不及的功能强大、内容丰富,但是作为一直以来都内带的附件程序,它具有小巧玲珑、简单实用等其它绘图软件所不具备的优点。

同时它的风格也被许多其它绘图软件所效仿。

2.2 总体设计本程序主体为一个文件:。

其中包括的程序段有:①():构造函数,用以初始化。

②():选择当前绘图颜色程序段。

③():设置当前画笔粗细程序段。

④():调用图形文件程序段。

⑤():新建一个图形文件程序段。

⑥():保存当前所绘制图形程序段。

⑦():新建一个基本图形单元程序段。

相应的内部类有:①:用来处理基本图形单元的按钮事件。

②1:用来处理、、三个操作按钮的按钮事件。

③:用来创建绘图区域的子类。

④:继承了,用来完成鼠标相应事件的操作,如单击、松开、进入和离开等。

⑤:继承了,用来完成鼠标拖动和鼠标移动的相应事件操作。

此外,还继承了父类的基本图形子类,如前所述,这里不再重复。

2.3系统功能设计画板主要由以下几个部分组成:1.主窗体的设计。

主类()用来生成主界面,完成画图板的主要框架。

主类由派生出来。

主界面由菜单栏、工具栏和画图区域三部分组成,布局格式采用布局形式。

2.菜单栏和工具栏的设计。

菜单栏包括文件菜单栏、颜色菜单栏、线条粗细菜单栏和提示菜单栏。

其中①文件菜单栏包括文件的新建、打开、保存等选项;②颜色菜单栏可以进行颜色选择;③线条粗细菜单栏设置线条的粗细;④提示菜单栏给出提示信息。

工具栏由新建、打开和保存文件按钮、基本图形的按钮、选择字体风格复选框和字体下拉列表框组成。

在主类中添加并对菜单栏和工具栏添加事件监听。

3.事件响应的处理。

对菜单栏、工具栏和用鼠标画图的事件响应进行处理。

①菜单栏中文件的新建、打开和保存菜单事件的处理:把每个文件都视作顺序字节流。

如果要在中进行文件处理,则必须用到包。

这个包定义了一些流类,选用(从文件中读入数据)和(向文件输出数据),通过建立这些文件的对象便可以打开文件。

这些流相应地从和派生,这些文件均使用文件流,所以必须将文件结构化以适应程序的要求。

我们需要对保存的对象序列化,然后以输出流的方式保存。

在程序中用()、()和()三个函数分别实现文件的新建、打开和保存。

②工具栏事件的处理:主要有一些组成。

我们用内部类处理基本单元事件,1内部类处理新建、打开和保存文件按钮,在画图类中定义()函数处理工具栏中的画图事件。

③鼠标画图:由于画图板主要是用来画图,所以需要在程序中添加对鼠标按下、拖动、进入、退出、移动和单机事件进行监听并进行处理。

内部类定义了完成鼠标按下、松开、进入、退出事件响应。

内部类完成鼠标拖动和移动事件响应。

4.画图的基本功能。

在程序设计中用到了动态绑定,我们可以提取他们的公共属性,先建立一个父类,然后建立各个子类,继承父类中的方法并将父类中的函数重写。

一些关于图形形状的类,最主要是用于画图、字体和橡皮擦等基本类型。

如、、,它们都是有超类(类)派生的。

在面向对象编程中,每个类都有画出自己的能力,每个类都有自己的函数,但每种形状的函数都不一样,但在绘制任何形状时,只需简单调用父类的方法,然后让程序动态地根据对象的类型决定使用哪个子类的方法。

为了使画出的图形更加美观,我们在函数中使用了2D的对象的引用。

这样可以在不改变原程序的情况下,添加扩展的图形,是程序变得更加强大。

同时,为了文件的保存,父类实现接口,将对象线性化。

3. 系统各功能模块设计3.1 界面设计我们可以看到,整个程序界面很简洁,而且界面操作、提示内容全部是中文,一目了然。

在左上方的菜单栏里有文件、颜色、线条粗细、帮助4个下拉式菜单,可以对绘图文件进行相应的操作。

下面一排是工具栏的工具按钮,从左到右依次为:新建文件、打开文件、保存文件、随笔画、直线、空心矩形、实心矩形、空心椭圆、空心圆、实心圆、空心圆角矩形、实心圆角矩形、橡皮擦、颜色选择按钮、线条粗细设置按钮、文字添加按钮、粗体字体选择框、斜体字体选择框、字体选择下拉式选择框。

整个工具栏是可以拖动的,可以将它拖动到程序窗口的任意位置。

工具栏下面的整个白色区域就是绘图区域,即绘图面板,它的大小可以随着窗口的大小自动调整。

在窗口的最底部是程序设计作者标注,以及鼠标状态提示条,可以显示当前的鼠标状态,包括进出窗口、移动、单击、松开等。

具体效果如下列图所示:3.2 功能实现(一):程序基本组成框架和结构1.一组基本图形按钮,包括:(随笔画)、(直线)、(矩形)、(实心矩形)、(椭圆)、(实心椭圆)、(圆)、(实心圆)、(圆角矩形)、(实心圆角矩形)、(橡皮擦)、(文字)。

这些基本图形都继承于同一个父类:。

具有变量(属性):x1212; 用来存放相应图形元素的坐标; 用来存放图形色彩颜色信息; 用来存放画笔粗细; 用来保存图形类型s1; 用来保存输入文字字符串s2; 用来保存字体类型字符串( 2D g2d ) {} ;()方法中用到了绘图里面的2D类,所有继承类的图形子类都重写了此方法。

这就是程序中类的继承的概念。

它对于程序代码的重用是很重要的,将极大的方便和简略程序代码。

2.此外,程序中还包括一下三个基本操作按钮:①新建():新建一个图形文件。

②打开():打开一个图形文件。

③保存():保存当前图形文件。

3.选择颜色和设置当前画笔粗细的按钮分别为:颜色()、线条粗细()。

4.选择当前字体风格的选择框为:粗体()、斜体(),用以设置当前字体的风格。

5.选择当前字体的下拉式复选框为:。

6.菜单条及其组成:①文件()菜单项,包括:(新建一个图形文件)、(打开一个图形文件)、(保存当前图形文件)、(退出程序)。

②颜色()菜单项:用来设置当前颜色。

③线条粗细()菜单项:用来设置当前画笔粗细。

④帮助()菜单项:有关的程序帮助提示。

(二):画图板相关操作1.新建一个图形文件单击工具栏上的图标,或选择→菜单,则清除当前所绘制的图像,回到初始画面。

2.打开已有的文件单击工具栏上的图标,或选择→菜单,则清除当前所绘制的图像,并弹出打开文件对话框要求选择要打开的文件。

如下图:3.保存单击工具栏上的图标,或选择→菜单,则弹出要求保存文件对话框。

如下图:4.绘制基本图形基本图形包括以下几种::随笔画,图标为:。

:直线,图标为:。

:矩形,图标为:。

:实心矩形,图标为:。

:椭圆,图标为:。

:实心椭圆,图标为:。

:圆,图标为:。

:实心圆,图标为:。

:圆角矩形,图标为:。

:实心圆角矩形,图标为:。

:橡皮擦,图标为:。

绘图时,单击工具栏上相应图形的图标,然后用鼠标拖动,在绘图区域内进行绘图即可。

5.设置画笔大小单击工具栏上的图标,或单击→菜单,则弹出相应的设置当前画笔粗细对话框。

如下图:6.选择颜色单击工具栏区域,或单击→菜单,则弹出相应的选择当前画图颜色对话框。

如下图:7.选择字体风格在工具栏区域,可以选择相应的字体风格,有粗体、斜体和粗斜体三种可供选择。

8.选择字体在工具栏区域,可以选择字体,本程序中有如下几种字体可供选择:宋体、隶书、华文彩云、仿宋2312、华文行楷、方正舒体、、、、、。

4. 课程设计总结和体会内容作为一名计算机系大二的学生,我觉得能做类似的课程设计是十分有意义,而且是十分必要的。

在已度过的大二的时间里我们大多数接触的是专业基础课。

我们在课堂上掌握的仅仅是专业基础课的理论面,如何去锻炼我们的实践面?如何把我们所学到的专业基础理论知识用到实践中去呢?我想做类似的大作业就为我们提供了良好的实践平台。

在做本次课程设计的过程中,我感触最深的当数查阅大量的书籍了。

为了让自己的设计更加完善,更加符合软件工程标准,一次次翻阅各种参考资料是十分必要的,同时也是必不可少的。

我们是在作设计,但我们不是艺术家。

他们可以抛开实际,尽情在幻想的世界里翱翔,我们是软件设计师,一切都要有据可依.有理可寻,不切实际的构想永远只能是构想,永远无法升级为设计。

作为一名专业学生掌握一门或几门程序设计语言是必不可少的,由于本次课程设计要求用进行开发,在这过程中我对各种的开发环境进行了探索,其中有等,这使我对的集成开发环境有了更深刻的理解虽然去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率好高,记得大一学好难就是因为我们没有把自己放在使用者的角度,单单是为了学而学,这样效率当然不会高。

边学边用这样才会提高效率,这是我作本次课程设计的第二大收获。

但是由于水平有限,难免会有错误,还望老师批评指正。

5.参考文献1.《编程思想》,机械工业出版社,1999年4月2.《项目设计与开发范例》,电子工业出版社,2005年4月,唐小军等3.《标准 2 使用手册》,电子工业出版社,2005年1月,魏海萍4.《开放源码编程》,电子工业出版社,2005年1月,沃纳斯6.致谢我要感谢刘延岭老师的教导,同时还要感谢课程设计过程中给予我帮助的同学。

附录.*;.*;.*;.*;.*;.*;主类,扩展了类,用来生成主界面{;; 定义输入输出流,用来调用和保存图像文件[]; 按钮数组,存放以下名称的功能按钮[]={"","","", 这三个是基本操作按钮,包括"新建"、"打开"、"保存"/*下面是我们的画图板上面有的基本的几个绘图单元按钮*/"","","","","","","","","","","","","",""};[]={" 宋体" , " 隶书" , " 华文彩云" , " 仿宋2312 " , " 华文行楷" ," 方正舒体" , " " , " " , " " ," " , " "};[];[]={这里是鼠标移动到相应按钮上面上停留时给出的提示说明条"新建一个文件","打开一个文件","保存当前文件","绘制线条","绘制直线","绘制空心矩形","绘制实心矩形","绘制空心椭圆","绘制实心椭圆","绘制空心圆形","绘制实心圆形","绘制空心圆角矩形","绘制实心圆角矩形","橡皮擦","选择颜色","设置线条粗细","输入文字"};; 定义按钮面板; 显示鼠标状态的提示条; 画图区域850550;[] [5000]; 用来存放基本图形的数组3; 设置默认画图状态为随笔画0; 当前已经绘制的图形数目; 当前画笔颜色; 用来存放当前色彩值f12; 用来存放当前字体风格1; 用来存放当前字体1.0f; 设置画笔粗细,默认值为1.0f;为粗体,为斜体,二者可以同时使用;(){("绘图画板");(); 定义菜单条("文件");('F');新建文件菜单条("新建");((){( e){(); 如果被触发,则调用新建文件函数段}});();保存文件菜单项("保存");((){( e){(); 如果被触发,则调用保存文件函数段}});();打开文件菜单项("打开");((){( e){(); 如果被触发,则调用打开文件函数段}});();();退出菜单项("退出");((){( e){(0); 如果被触发,则退出画图板程序}});();();设置颜色菜单条("颜色");选择颜色菜单项("选择颜色");((){( e){(); 如果被触发,则调用选择颜色函数段}});();();设置线条粗细菜单条("线条粗细");设置线条粗细菜单项("设置线条粗细");((){( e){();}});();();设置提示菜单条("帮助");设置提示菜单项("关于画板");((){( e){(,"画板\n作者:王晓红\n指导教师:刘延岭\n于2011年12月26日,承德石油高等专科学校"," 画图板说明",);}});();();[];创建各种基本图形的按钮();[];= ( ) ;= ( ) ;();1 1 1();导入我们需要的图形图标,这些图标都存放在与源文件相同的目录下面( 0<){[i] ([i] + "");[i] (""[i]);[i]([i]);([i]);}将动作侦听器加入按钮里面( 3<3){[i]();}[0]((){( e){();}});[1]((){( e){();}});[2]((){( e){();}});[3](1);[2](1);[1](1);字体风格选择();(8);((){( e){1[()];}});字体选择("粗体");("斜体");();();();();();();();( ( 50, 20 ) );( ( 100, 20 ) );();( );();();();();(" 欢迎使用卿乐绘图画板→O(∩_∩)O作者:王晓红→指导教师:刘延岭");();();();}按钮侦听器类,内部类,用来侦听基本按钮的操作{( e){( 3<3){(()[j]){;();();}}}}按钮侦听器1类,用来侦听颜色选择、画笔粗细设置、文字输入按钮的操作1{( e){(()[3]){();}(()[2]){();}(()[1]){(,"请点击绘图板选择输入文本的位置","提示" );14;();();}}}鼠标事件类,继承了,用来完成鼠标相应事件操作{( e){(" 作者:王晓红→承德石油高等专科学校→鼠标按下位置:[" + () + ", " + () + "]")设置状态提示[]1[]2();[]1[]2();如果当前选择的图形是随笔画或者橡皮擦,则进行下面的操作(313){[]1[]2();[]1[]2();;();}如果当前选择的图形式文字输入,则进行下面操作(14){[]1();[]1();;("请输入你想要输入的文本");[]1;[]21;[]22;[]21;;14;();();}}( e){(" 作者:王晓红→承德石油高等专科学校→鼠标松开位置:[" + () + ", " + () + "]");(313){[]1();[]1();}[]2();[]2();();;();}( e){(" 作者:王晓红→承德石油高等专科学校→鼠标进入位置:[" + () + ", " + () + "]");}( e){(" 作者:王晓红→承德石油高等专科学校→鼠标退出位置:[" + () + ", " + () + "]");}}鼠标事件类继承了,用来完成鼠标拖动和鼠标移动时的相应操作{( e){(" 作者:王晓红→承德石油高等专科学校→鼠标拖动位置:[" + () + ", " + () + "]");(313){[1]1[]2[]1();[1]1[]2[]1();;();}{[]2();[]2();}();}( e){(" 作者:王晓红→承德石油高等专科学校→鼠标移动位置:[" + () + ", " + () + "]");}}选择字体风格时候用到的事件侦听器类,加入到字体风格的选择框中{( e){(())(())f1;f1;(())(())f2;f2;}}画图面板类,用来画图{(){(());();( ());( ());}( g){(g);2D g2(2D)g; 定义画笔(j<){(g2[j]);;}}(2D g2 i){(g2d)将画笔传入到各个子类中,用来完成各自的绘图}}新建一个画图基本单元对象的程序段(){ (14)进行相应的游标设置(());(());(){3:[] ();;4:[] ();;5:[] ();;6:[] ();;7:[] ();8:[] ();;9:[] ();;10:[] ();;11:[] ();;12:[] ();;13:[] ();;14:[] ();;}[];[];[];[];[];}选择当前颜色程序段(){(,"请选择一种颜色");();();[];[];[];}选择当前线条粗细程序段(){;("请输入一个浮点型线条粗细值( >0 )"); ();[];}保存图形文件程序段(){();();();();();();(()(""))(,"文件名无效","文件名无效", );{{();();();;( 0< ){[ i ] ;(p);(); 将所有图形信息强制转换成父类线性化存储到文件中}();();}( ){();}}}打开一个图形文件程序段,函数通过建立对象读入文件(){();();();();();();(()(""))(,"文件名无效","文件名无效", );{{();();0;();(0< ){()();[ ] = ;}();();();}( ){(,"文件里没有更多的记录","无法找到类" );}( ){(,"不能创建对象","文件结束" );}( ){(,"从文件读取资料出错","读出错误" );}}}新建一个文件程序段(){0;3;;1.0f;();()将有关值设置为初始状态,并且重画}主函数段( []){ {( ());}( e ) {}将界面设置为当前风格();((){( e){(0);}});}}定义画图的基本图形单元父类,基本图形单元,用到串行化接口,保存时所用{x1122; 定义坐标属性; 定义色彩属性; 定义线条粗细属性; 定义字体属性s1;s2; 定义字体风格属性(2D g2d){}定义绘图函数}/*************************************************下面是各种基本图形单元的子类,都继承自父类,请仔细理解继承的概念**************************************************/直线类{(2D g2d){g2( ());g2( (,));g2(x1122);}}矩形类{(2D g2d){g2( ());g2( ());g2((x12)(y12),(x12)(y12));}}实心矩形类{(2D g2d){g2( ());g2( ());g2((x12)(y12),(x12)(y12));}椭圆类{(2D g2d){g2( ());g2( ());g2((x12)(y12),(x12)(y12));}}实心椭圆{(2D g2d){g2( ());g2( ());g2((x12)(y12),(x12)(y12));}}圆类{(2D g2d){g2( ());g2( ());g2((x12)(y12),((x12)(y12)),((x12)(y12)));}实心圆{(2D g2d){g2( ());g2( ());g2((x12)(y12),((x12)(y12)),((x12)(y12)));}}圆角矩形类{(2D g2d){g2( ());g2( ());g2((x12)(y12),(x12)(y12),50,35);}}实心圆角矩形类{(2D g2d){g2( ());g2( ());g2((x12)(y12),(x12)(y12),50,35);}}随笔画类{(2D g2d){g2( ());g2( (,));g2(x1122);}}橡皮擦类{(2D g2d){g2( (255,255,255));g2( (4,));g2(x1122);}}输入文字类{(2D g2d){g2( ());g2( (s222,(())*18));(s1 )g2(s111);} }。

相关文档
最新文档