欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    -java模拟时钟课设.doc

    • 资源ID:23950291       资源大小:498KB        全文页数:96页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    -java模拟时钟课设.doc

    Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-date-java模拟时钟课设数字信号处理课程设计JAVA模拟时钟课设1.课程设计的目的Java语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布应用等特点。面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,而且有利于软件的维护和继承。为了进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,锻炼学生熟练的应用面向对象的思想和设计方法解决实际问题的能力,开设了一周的Java程序设计课程设计。通过此次课程设计,巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、Editplus、Eclipse、JCreator等开发工具的运用,拓宽常用类库的应用。使学生通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。2.设计方案论证2.1运行环境:JCreator +JDK平台 CPU:Pentium 2.8GHz以上内存:256MB以上硬盘空间:80G以上操作系统:Windows XP2.2设计思路及功能描述Java是一种简单的,面向对象的,分布式的,解释的,键壮的,安全的,结构中立的,可移植的,性能很优异的,多线程的,动态的语言。Java去掉了C+语言的许多功能,让Java的语言功能很精炼,并增加了一些很有用的功能,如自动收集碎片。这将减少平常出错的50%。而且,Java很小,整个解释器只需215K的RAM。因此运用Java程序编写模拟时钟程序,实现简单显示时间的功能。本次课程设计做的是Java简单模拟时钟,它是图形界面、线程、流与文件等技术的综合应用,其界面主要采用了java.awt包,javax.swing包等。 程序实现了模拟时钟的基本功能。我设计的时钟有的界面良好,比较简洁美观,程序有很强的实用性,实现程序与电脑的时间的同步。可以显示时钟,也可以显示分针秒针,并可以在相应位置调整时间。而且初始运行会自动与电脑的时间校对,一般默认为同步,但还可以自己再次调节,提高了实用性。本系统共包括1个java源文件。Clock源文件是本程序的主函数其作用是初始化棋盘。setCurrentTime源文件实现电脑设置时间。paintHourPointer源文件为时针. paintSecondPointer源文件实现人与电脑设置秒针. paintMinuteDot源文件人与电脑设置分针。2.3方案论证2.3.1详细设计类名: Clock 作用: 自定义主类,对鼠标拖拽的初始界面进行声明继承的父类: JComponent类 实现的接口: 没有 表1-成员变量表Clock成员变量成员变量描述变量类型名称时针StringHour分针StringMinute秒针StringSecond时间点TextFieldtext_1表2-方法表Clock方法方法名功能备注setCurrentTime设置当前时间构造方法paintHourPointer设置时针 接口方法paintSecondPointer设置秒针 接口方法paintMinuteDot设置分针 接口方法actionPerformed事件处理 run程序运行 2.3.2概要设计启动时钟注册界面秒针走时分针走时时针走时关闭时钟图1 程序基本框图程序中引入的包:package Clockimport java.awt.Clockimport java.awt.Graphicsimport java.awt.event.WindowAdapterimport java.awt.event.WindowEventimport java.util.Calendarimport java.util.GregorianCalendar用户自定义类:类名:Clock作用:定义模拟时钟继承的父类:JFramepublic class clock extends JFrame定义的对象:ClockPaint size Resizable Location Title Visible WindowListener,WindowClosing 主要成员方法:public void center /定义小程序查看器的位置public void actionPerformed /定义处理异常机制定义子类:ClockPaint继承的父类名:JPanel继承的接口名:Runnableclass ClockPaint extends JPanel implements Runnableint h, m, s / 小时,分钟,秒主要成员方法:public ClockPaintthis.x = xthis.y = ythis.r = rs = now.get(Calendar.SECOND) * 6 / 获得秒转换成度数m = now.get(Calendar.MINUTE) * 6 / 获得分钟h = (now.get(Calendar.HOUR_OF_DAY) - 12) * 30+ now.get(Calendar.MINUTE) / 12 * 6 / 获得小时主要成员方法:public void paint(Graphics g) / 清屏super.paint(g)g.setColor(Color.BLACK)g.fillRect(0, 0, r * 3, r * 3) / 画圆g.setColor(Color.WHITE)g.drawOval(x, y, r * 2, r * 2) / 秒针g.setColor(Color.RED)int x1 = (int) (r - 10) * Math.sin(rad * s)int y1 = (int) (r - 10) * Math.cos(rad * s)g.drawLine(x + r, y + r, x + r + x1, y + r - y1) / 分针g.setColor(Color.BLUE)x1 = (int) (r - r / 2.5) * Math.sin(rad * m)y1 = (int) (r - r / 2.5) * Math.cos(rad * m)g.drawLine(x + r, y + r, x + r + x1, y + r - y1) / 时针g.setColor(Color.CYAN)x1 = (int) (r - r / 1.5) * Math.sin(rad * h)y1 = (int) (r - r / 1.5) * Math.cos(rad * h)g.drawLine(x + r, y + r, x + r + x1, y + r - y1) / 数字g.setColor(Color.YELLOW)int d = 29for (int i = 1; i <= 12; i+) x1 = (int) (r - 10) * Math.sin(rad * d)y1 = (int) (r - 10) * Math.cos(rad * d)g.drawString(i + "", x + r + x1 - 4, x + r - y1 + 5)d += 30 / 小点d = 0;for (int i = 0; i < 60; i+) x1 = (int) (r - 2) * Math.sin(rad * d)y1 = (int) (r - 2) * Math.cos(rad * d)g.drawString(".", x + r + x1 - 1, x + r - y1 + 1)d += 6 / 显示时间 /Calendar now1 = new GregorianCalendar(); /g.drawString(now1.get(Calendar.HOUR_OF_DAY) + ":" /+ now1.get(Calendar.MINUTE) + ":" + now1.get(Calendar.SECOND), /0, 10);主要成员方法:public void run捕获异常catch (Exception ex) 完成显示实时数据s += 6if (s >= 360) s = 0m += 6if (m = 72 | m = 144 | m = 216 | m = 288) h += 6if (m >= 360) m = 0h += 6;if (h >= 360) h = 0;this.repaint();用Java实现动画的原理与放映动画片类似,就是取若干个相关的图像或图片,顺序、连续地在屏幕上先显示、后擦除,循环往复就可以获得动画的效果。在动画设计中,一般会用到paing( )、repaint( )、和update( )方法。在动画设计中,有时会存在抖动问题,但一般来说,浏览器能很好地解决显示和刷新问题。在图形设计中,若重写paint( )方法可以自动绘制所希望的图形,在需要更新图形时可调用repaint( )方法,而不需要重写repaint( )方法。至于update( )方法,一般情况下既不需要重写,也不需要调用。只是在动画设计中,如果仅重写paint( )方法,会产生抖动现象,为消除抖动现象,需要重写update( )方法。在主页中经常会看到卡通似的动画效果,制作这种动画的原理也是很简单的,就是通过快速地放映许多张图片,利用人眼的视觉暂留特性来达到动画的效果。动画的质量除了取决于图片的好坏之外,动画中动画的平滑速度,也是非常关键的。2.4程序说明先是利用构造函数创建一个长为500,宽为200的窗体,颜色设置为black,并把窗体设计为固定大小,并且创建一个监听事件进行监听。随即创建一个时间计数器,最后实现ActionListener接口的实现方法。利用2D绘制图形的方法,在窗体左方画一个圆,并且绘制时钟上的12个汉字,然后利用Calendar类提供的HOUR,MINUTE,SECOND和MILLISECOND方法获得现在的时间,在计算时间和度数的关系;在利用2D绘制图形的方法绘制出各指针,并设置不同的颜色。在利用drawString在窗体的右上方画出一个小的框并在里面现在和时钟相对数字时间;然后根据相同的方法在数字时间下面显示秒表功能。在设计的过程中,需要用到Swing组件和Swing容器与组件,布局管理器,事件处理,绘制图形,还运用到了类的继承,事件监听器和线程。“SimpleDateFormat formatter”用于格式化时间显示,“String lastdate”用于保存当前时间的字符串,“Font clockFaceFont”用于设置显示时钟里面的数字的字体;“Date currentDate”用于显示当前时间;“Color handColor”用于显示时针、分针和表盘的颜色;“Color numberColor” 用于显示秒针和数字的颜色,“public void init()”用于设计时钟格式并捕捉异常;“public void plotpoints(int x0, int y0, int x, int y, Graphics g)” 用于计算四分之一的圆弧;“public void circle(int x0, int y0, int r, Graphics g”) 用Bresenham算法来画圆,其中(x0,y0)是圆的中心,r为圆半径;“public void paint(Graphics g)”用于运行时钟程序; “public void start()” applet的启动方法;“public void stop()” applet的停止方法;“public void run()” 线程的run方法。run( )方法就是分出去让程序同时运行的、用来处理休眠和重画图形的线程。3.设计结果与分析3.1设计结果当程序正常运行的时候,它能清晰的显示时钟界面。默认为与系统时间同步,如果出现错误,就会进行归零。运行界面如图图2运行界面3.2设计分析本程序可以在HTML文件中设置,变化出多姿多彩的时钟模型,在MyClock.class的源代码的编写过程中运用了paint( )、repaint( )、update( )等方法。时钟的绘制采用双缓冲图形处理机制,即先在缓冲区内绘制图形,再把图形显示到网页上可以有效的防止闪烁。时钟的不断绘制是通过一个线程不断读取系统时间,如果时间有变化即绘制。采用一个线程绘制。遇到的问题和解决方法:在用JAVA编写程序时,我遇到了很多困难,对很多的接口,类,方法都不是很熟悉,只好采用查看API文档,一个一个进行对照学习,同时也上网查看了有关模拟时钟的相关描述,还向同学请教了,翻阅了相关的书籍。程序异常处理:程序在运行过程中可能会出现错误且断正常的控制流,这就是异常处理。不提供处理异常代码的程序可能会在不期望终止的时候终止,甚至可能引发严重问题。Java的异常处理子系统可以为程序员提供处理运行是错误即异常处理的能力,而且比其他语言提供的异常处理能力在形式上更简洁、更灵活,使用Java的异常处理子系统,程序员可以开发出比较健壮的程序。声明异常:声明异常是当方法执行时,声明方法中可能出现的错误。因为任何代码都可能出现系统错误和运行错误,所以Java不需要在方法中显示声明Error和RuntimeException,但是如果方法抛出其它异常,则必须在方法中显示声明它们。可以使用方法声明中的关键字throws声明方法中的异常。Public void myMethod() throws IOException抛出异常:在声明异常的方法中,如果出现异常,可以抛出异常对象。声明异常是一个说明性的句子,只是表明方法可能会抛出异常,而真正抛出异常的动作是有抛出异常语句来完成的。抛出异常的语句如下:Throw new TheException();也可以使用以下的语句:TheException e=new TheException();Throw e;使用try-catch语句捕获异常在Java中,异常处理的核心语句是try和catch。虽然由JVM提供的默认异常处理程序对于我们调试程序很有帮助,但是通常我们希望自己处理异常,因为可以防止程序非正常终止,并可以有机会改正程序中的错误。Try-catch语句的语法形式为:try block of code to monitor for errors catch(ExceptionTypel Obj1) handler for ExcepType1 catch(ExceptionType2 Obj2) handler for ExcepType2 4.设计体会本次Java课程设计我的题目是时钟,题目不算难,但我做的很艰苦。主要就是动手能力太差,理论知识掌握的不全面,自以为会不少,但真做起来,却不知道从哪下手了。又回去温习理论知识,请教老师,上网查资料,忙的不亦乐乎。不过经过努力总算是做出来了,还通过此次课程设计,将我本学期所学的JAVA知识得到巩固和应用。在设计的过程中我遇到的很多问题,在老师的帮助和自己的思考下还是很好的完成了。这此课程设计我懂得了写程序不能脱离实际,只凭主观办事,要努力拓宽知识面,拓展思维。事情就是如此,努力代表收获。通过这次课程设计,我才真正领悟到“艰苦奋斗”这一词的真正含义,我才感受到早期电子设计者为现代的社会付出。设计确实有些辛苦,但苦中也有乐,在如今单一的理论学习中,很少有机会能有实践的机会,但现在可以,这些天的设计中得到的东西却不比理论课上得到的少多少,我感觉我和Java的距离更加近了;我想说,确实很累,但当我看到自己所做的成果时,心中也不免产生兴奋; 学习有成果了么。对Java编程有了一个基本的了解。这些天温习的内容越多,敲得代码越多,自己的学习积极性也越在提高,感觉也越充实。越来越发现现在学习的只是Java的基础,但涉及的面还是很广泛的,这些都为以后进一步学习Java的高级特性打下了扎实的基础。随着课程难度的慢慢加强,今后遇到的困难也必将会越来越多,但我相信自己一定能做好这些的。在本次Java课程设计中,我要非常感谢我的指导老师,不但在课堂上教给了我很多的Java的编程知识,编程思想,而且在这次课程设计中更教会了我动手的能力,真正的编出了自己的东西,还要感谢我的同学,他们在我遇到困难时也给了我很多帮助。感谢我的老师在课程设计上给予我的指导、提供给我的支持和帮助,这是我能顺利完成这次报告的主要原因,更重要的是老师帮我解决了许多技术上的难题,让我能把设计做得更加完善。在此期间,我不仅学到了许多新的知识,而且也开阔了视野,提高了自己的设计能力。最后,我要感谢帮助过我的同学,他们也为我解决了不少我不太明白的设计上的难题。同时也感谢学院为我提供良好的做课程设计的环境。最后再一次感谢所有在设计中曾经帮助过我的良师益友和同学。5.参考文献1Java语言与面向对象程序设计M.朱福喜、尹为民、余振坤编著,武汉:武汉大学出版社,2009.32Java语言与面向对象程序设计M.印旻编著,北京:清华大学出版社,2010.63Java程序设计实用教程M.朱站立、沈伟编著,北京:电子工业出版社,2008.94 孙一林、彭波、黄文宏. Java编程技术全接触M. 北京:清华大学出版社 ,2009.35 丁振凡、薛清华. Java语言程序设计M. 北京: 清华大学出版社,2010.106 徐林林. Java Web编程从入门到实践M. 北京:清华大学出版社 ,2010.37 赵振方、陈景霞. 轻松学Java编程M. 化学工业出版社,2012.46.附表public void setCurrentTimeAsSystemTime() /定义Date类的一个对象,用来获取系统时间 Date timeCurrent=new Date(); catch(InterruptedException e) import java.awt.*; import java.awt.geom.Ellipse2D; import java.awt.geom.GeneralPath; import java.awt.geom.Line2D; import java.awt.geom.Rectangle2D; import java.util.Calendar; import java.util.Date; import javax.swing.BorderFactory; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.UIManager; public class Clock extends JComponent private static final Color INTEGRAL_COLOR = new Color(0, 128, 128); private int radius; private Calendar currentTime = Calendar.getInstance(); private double s = 0.03; public Clock(int radius) this.radius = radius; public void setCurrentTime(Date time) /设置当前时间 this.currentTime.setTime(time); public void setCurrentTime(long millis) this.currentTime.setTimeInMillis(millis); public Dimension getPreferredSize() Insets insets = getInsets(); int r = (int) (radius = -1 ? 0 : radius*(1+s)+1; return new Dimension(r * 2 + insets.left + insets.right,r * 2 + insets.top + insets.bottom); /返回一个指定宽、高的Dimension protected void paintComponent(Graphics g) super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); Insets insets = getInsets(); int wid = getWidth() - insets.left - insets.right; int hei = getHeight() - insets.top - insets.bottom; int r = (int) (Math.min(wid, hei) / 2 / (1+s); g2d.translate(insets.left + r * (1+s), insets.top + r * (1+s); g2d.scale(1, -1); for (int i = 0; i < 60; i+) int angle = 90 - i * 6; double pos = calcPos(r, angle); paintMinuteDot(r, g2d, pos0, pos1, i % 5 = 0); paintHourPointer(r, g2d); paintMinutePointer(r, g2d); paintSecondPointer(r, g2d); paintCenterPoint(g2d); g2d.scale(1, -1); g2d.translate(-insets.left - r * (1+s), -insets.top - r * (1+s); private void paintCenterPoint(Graphics2D g2d) g2d.setColor(Color.BLUE); Rectangle2D rect = new Rectangle2D.Double(-2, -2, 4, 4); g2d.fill(rect); private void paintMinutePointer(int r, Graphics2D g2d) int minute = currentTime.get(Calendar.MINUTE); int second = currentTime.get(Calendar.SECOND); double angle = 90 - (minute + second / 60.0) * 6; Shape pointerShape = createPointerShape(r * 0.8, r * 0.04, r * 0.08, angle); g2d.setColor(Color.LIGHT_GRAY); g2d.fill(pointerShape); g2d.setColor(Color.DARK_GRAY); g2d.draw(pointerShape); private void paintHourPointer(int r, Graphics2D g2d) int hour = currentTime.get(Calendar.HOUR); int minute = currentTime.get(Calendar.MINUTE); int second = currentTime.get(Calendar.SECOND); double angle = 90 - (hour + minute / 60.0 + second / 3600.0) * 30; Shape pointerShape = createPointerShape(r * 0.6, r * 0.06, r * 0.1, angle); g2d.setColor(Color.LIGHT_GRAY); g2d.fill(pointerShape); g2d.setColor(Color.DARK_GRAY); g2d.draw(pointerShape); private Shape createPointerShape(double r1, double r2, double r3, double angle) GeneralPath gp = new GeneralPath(); double pos = calcPos(r1, angle); double pos1 = calcPos(r2, angle + 90); gp.append(new Line2D.Double(pos0, pos1, pos10, pos11), true); double pos2 = calcPos(r3, angle + 180); gp.lineTo(float)pos20, (float)pos21); double pos3 = calcPos(r2, angle + 270); gp.lineTo(float)pos30, (float)pos31); gp.closePath(); return gp; private void paintSecondPointer(int r, Graphics2D g2d) g2d.setColor(Color.BLACK); int second = currentTime.get(Calendar.SECOND); int angle = 90 - second * 6; double pos = calcPos(r * 0.9, angle); double pos1 = calcPos(r * 0.2, angle + 180); Line2D line = new Line2D.Double(pos10, pos11, pos0, pos1); g2d.draw(line); private void paintMinuteDot(int r, Graphics2D g2d, double x, double y, boolean flag) g2d.setColor(flag ? Color.RED : Color.BLACK); if (flag) /Rectangle2D rect = new Rectangle2D.Double( Ellipse2D rect = new Ellipse2D.Double( x - r * s, y - r * s, r * s * 2, r * s * 2); g2d.fill(rect); else /Rectangle2D rect = new Rectangle2D.Double( Ellipse2D rect = new Ellipse2D.Double( x - r * 0.02, y - r * 0.02, r * 0.04, r * 0.04); g2d.fill(rect); private double calcPos(double r, double angle) double radian = Math.toRadians(angle); double x = r * Math.cos(radian); double y = r * Math.sin(radian); return new double x, y; public static void main(String args) try UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName(); catch (Exception e) e.printStackTrace(); final Clock clock = new Clock(50); clock.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10); JFrame f = new JFrame( "软件081班 071404011 孙庆贺 "); /f.setBounds(380,200,500,600); f.getContentPane().add(clock, BorderLayout.CENTER); f.pack(); f.setLocationRelativeTo(null); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); new Thread() public void run() while (true) try Thread.sleep(1000); catch (InterruptedException ex) ex.printStackTrace(); clock.setCurrentTime(System.currentTimeMillis(); clock.repaint(); .start(); int y1 = (int)(r - 10) * Math.cos(rad * s);g.drawLine(x + r, y + r, x + r + x1, y + r - y1);/分针g.setColor(C

    注意事项

    本文(-java模拟时钟课设.doc)为本站会员(豆****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开