




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、卡通时钟的设计姓名: 学号: 专业: 班级:一、概述JAVA程序设计是计算机相关专业的必修专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。本课程的程序设计专题实际是计算机相关专业学生学习完JAVA程序设计课程后,进行的一次全面的综合训练,JAVA程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。按课程设计指导书提供的课题,要求学生在自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。要求
2、学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序;掌握JAVA程序设计的基本技能和面向对象的概念和方法;了解多线程、安全和网络等编程技术。同时培养学生进行分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。二、主要内容本次设计主要是要时钟有良好的界面,比较简洁美观,有很强的实用性,实现程序与电脑的时间的同步,可以显示时钟,可以显示分针秒针,并且也可以在相应位置调整时间。而且初始运行会自动与电脑的时间校对,一般默认为同步,还要可以自
3、己再次调节,提高了实用性。本系统共包括1个java源文件。1、Clock源文件是本程序的主函数其作用是初始化棋盘。2、setCurrentTime源文件实现电脑设置时间。3、源文件为时针.4、paintSecondPointer源文件实现人与电脑设置秒针.5、paintMinuteDot源文件人与电脑 三、程序代码电脑设置时间public void setCurrentTime(Date time) this.currentTime.setTime(time); public void setCurrentTime(long millis) this.currentTime.setTimeIn
4、Millis(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); protected void paintComponent(Graphics g) super.paintComponent(g); Graphics2D
5、 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.tran
6、slate(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
7、(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
8、 = 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); g2
9、d.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 pointerShap
10、e = 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 = c
11、alcPos(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 g
12、p; 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
13、); 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
14、(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.
15、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 = ne
16、w JFrame( C0942 0901024233 郭富康); /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
17、 (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(Color.BLUE);x1 = (int)(r - r / 2.5) * Math.sin(rad * m);y1 = (int)(r -
18、 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 = 29;for (int i = 1; i = 12; i
19、+) 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 = 360) s = 0;m+=6;if (m = 72 | m = 144 | m = 216 | m = 288) h+=6;if (m = 360) m = 0;h+=6;if (h =360) h = 0;this.repaint();int x, y, r;int
20、h, m, s;double rad = Math.PI / 180;public ClockPaint(int x, int y, int r) this.x = x;this.y = y;this.r = r;Calendar now = new GregorianCalendar();s = 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;Thread
21、 t = new Thread(this);t.start();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);绘制钟面 public void paintComponent(Graphics g) supe
22、r.paintComponent(g); g.drawOval(100, 5, 120, 120); g.drawOval(101, 6, 118, 118); double hourAngle = 2 * Math.PI * (seconds - 3 * 60 * 60) / (12 * 60 * 60); double minuteAngle = 2 * Math.PI * (seconds - 15 * 60) / (60 * 60); double secondAngle = 2 * Math.PI * (seconds - 15) / 60; public void timeElap
23、sed(Timer1 t) calendar.setTime(new Date(); if(MyTimer1.count=1) int a=1; seconds=MyTHour*60*60+MyTMinute*60+MyTSecond; seconds+=a;/a为秒自加 repaint(); else seconds = calendar.get(Calendar.HOUR) * 60 * 60 + calendar.get(Calendar.MINUTE) * 60 + calendar.get(Calendar.SECOND); repaint(); 显示当前时间 public void displayCurrentTime() JOptionPane.showMessageDialog(null,intHour+:+intMinute+:+intSecond); 设定当前时间 public void setCurrentTime() String strTemp=JOptionPane.showInputDialog(null,请输入当前小时(24小时制):); int iHour=Integer.parseInt(strTemp); strT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年文化创意产业园区建筑室内外空间绿色景观设计评估报告
- 新媒体时代短视频内容监管挑战与对策研究2025年报告
- 2025年汽车共享平台共享经济模式与商业价值研究报告
- 2025年矿山无人作业技术智能化矿山信息化建设报告
- 新医改下2025年医药流通行业供应链管理优化与成本控制报告
- 2025年开放银行生态构建与合作模式创新云计算赋能的行业洞察报告
- (五四制)八年级下学期期末语文试卷
- 学校食堂责任督学制度
- T/DZJN 38-2021退役动力电池模组余能检测及残值评估技术指南
- 互联网小额贷款风控系统行业跨境出海项目商业计划书
- 交通运输布局对区域发展的影响-扬州的兴衰高一地理人教版(2019)必修第二册
- 德阳市绵竹市2023年三下数学期末含解析
- 2023年福建省福州市八县一中联考高一化学第二学期期末达标测试试题含解析
- 北师大版五年级(下册)数学知识要点归纳|期末复习
- 同济大学实验报告封面
- 2023年开放大学应急管理记分作业题库
- 检针机九点测试方法示意图
- 马鞍山南山开发公司和尚桥铁矿围岩综合利用扩能技术改造项目环境影响报告表
- 知识点一RLC串联电路的电压关系
- 宁夏物理中考考点
- 门诊病历检查评分表
评论
0/150
提交评论