简单分析:

  1. package clockApplet;
  2.  
  3. import java.applet.Applet;
  4. import java.awt.Color;
  5. import java.awt.Graphics;
  6. import java.util.Calendar;
  7. import java.util.GregorianCalendar;
  8.  
  9. public class ClockApplet extends Applet implements Runnable {
  10. /* 成员变量 */
  11. int x = 0, y = 0, r = 100; // (x,y)为(0,0)点,表示原点
  12. int h, m, s; // 时,分,秒
  13. double rad = Math.PI / 180; //  1°
  14.  
  15. /* 初始化函数 */
  16. public void init() {
  17. Calendar now = new GregorianCalendar(); /*
  18. * GregorianCalendar(标准阳历)
  19. * 是Calendar(日历)【国际环境下都能运行的程序】
  20. * 的子类
  21. */
  22. s = now.get(Calendar.SECOND) * 6; // 秒针转换成角度:1秒,秒针动一次,转动6°
  23. m = now.get(Calendar.MINUTE) * 6; // 分针转换为角度:1分,分针动一次,转动6°
  24. h = now.get(Calendar.HOUR) * 30 + now.get(Calendar.MINUTE) / 12 * 6; // 先把分化为小时,再乘以6°
  25. /*
  26. * Calendar.HOUR 显示范围:1-12(无论AM还是PM) Calendar.HOUR_OF_DAY 显示范围:1-24(包括PM
  27. */
  28.  
  29. Thread t = new Thread(this);
  30. t.start();
  31. }
  32.  
  33. /*
  34. * 画图函数 注意:Applet的画图界面以左上角为(0,0)原点坐标,即所有坐标均大于等于0,该点的坐标越大(且>0)
  35. */
  36. public void paint(Graphics g) {
  37. super.paint(g);
  38. /*
  39. * paint(g)函数会重绘图像,要加上super.paint(g),表示在原来图像的基础上,再画图。
  40. * 如果不加super.paint(g),重绘时,会将原有的绘制清空,再根据paing(g)函数绘制。
  41. */
  42.  
  43. g.setColor(Color.BLACK);
  44. g.drawOval(x, y, r * 2, r * 2);// 画表
  45. /* drawOval(x,y,width,height)以矩形恰好框住椭圆,矩形左上角的顶点坐标为(x,y) */
  46.  
  47. // 秒针
  48. int x1 = (int) (90 * Math.sin(rad * s));
  49. int y1 = (int) (90 * Math.cos(rad * s));
  50. g.drawLine(r, r, r + x1, r - y1);
  51. /* drawLine(a,b,c,d) (a,b)为起始坐标 (c,d)为终点坐标 */
  52.  
  53. // 分针
  54. x1 = (int) (80 * Math.sin(rad * m));
  55. y1 = (int) (80 * Math.cos(rad * m));
  56. g.drawLine(r, r, r + x1, r - y1);
  57.  
  58. // 时针
  59. x1 = (int) (60 * Math.sin(rad * h));
  60. y1 = (int) (60 * Math.cos(rad * h));
  61. g.drawLine(r, r, r + x1, r - y1);
  62.  
  63. // 画数字
  64. int d = 30;
  65. for (int i = 1; i <= 12; i++) {
  66. x1 = (int) ((r - 10) * Math.sin(rad * d));
  67. y1 = (int) ((r - 10) * Math.cos(rad * d));
  68. g.drawString(i + "", r + x1, r - y1);
  69. d += 30;
  70. }
  71.  
  72. // 画刻度
  73. d = 0;
  74. for (int i = 1; i <= 60; i++) {
  75. x1 = (int) ((r - 2) * Math.sin(rad * d));
  76. y1 = (int) ((r - 2) * Math.cos(rad * d));
  77. g.drawString(".", r + x1, r - y1);
  78. d += 6;
  79. }
  80. // 显示时间
  81. Calendar now1 = new GregorianCalendar();
  82. int a, b, c;
  83. a = now1.get(Calendar.HOUR_OF_DAY);
  84. b = now1.get(Calendar.MINUTE);
  85. c = now1.get(Calendar.SECOND);
  86. g.drawString(a + ":" + b + ":" + c, 0, 10);
  87.  
  88. }
  89.  
  90. // 实现Runnable
  91. public void run() {
  92. while (true) {
  93.  
  94. try {
  95.  
  96. Thread.sleep(1000);// 间隔一秒
  97.  
  98. } catch (Exception ex) {
  99. }
  100.  
  101. // 秒针每次走6°
  102. s += 6;
  103.  
  104. // 秒针归零
  105. if (s >= 360) {
  106.  
  107. s = 0;
  108. m += 6;
  109.  
  110. // 分针走72°,时针走6° 分针的12倍,时针走一次
  111. if (m == 72 || m == 144 || m == 288) {
  112. h += 6;
  113. }
  114.  
  115. // 分针归零
  116. if (m >= 360) {
  117. m = 0;
  118. h += 6;
  119. }
  120.  
  121. // 时针归零
  122. if (h >= 360) {
  123. h = 0;
  124.  
  125. }
  126. }
  127.  
  128. // 重新绘制
  129. this.repaint();
  130. }
  131. }
  132.  
  133. }

无注释简码:

  1. package clockApplet;
  2.  
  3. import java.applet.Applet;
  4. import java.awt.Color;
  5. import java.awt.Graphics;
  6. import java.util.Calendar;
  7. import java.util.GregorianCalendar;
  8.  
  9. public class Test extends Applet implements Runnable {
  10.  
  11. int x = 0,y = 0,r = 100,r1 = 90,r2 = 80,r3 = 60;
  12. double rad = Math.PI/180;
  13. int s,m,h;
  14.  
  15. public void init(){
  16. Calendar calendar = new GregorianCalendar();
  17. s = calendar.get(Calendar.SECOND)*6;
  18. m = calendar.get(Calendar.MINUTE)*6;
  19. h = calendar.get(Calendar.HOUR)*30 + calendar.get(Calendar.MINUTE)/12*6;
  20. Thread thread = new Thread(this);
  21. thread.start();
  22. }
  23.  
  24. public void paint(Graphics g) {
  25. super.paint(g);
  26.  
  27. g.setColor(Color.black);
  28. g.drawOval(x, y, r*2, r*2);
  29.  
  30. int x1 = (int)(r1*Math.sin(rad*s));
  31. int y1 = (int)(r1*Math.cos(rad*s));
  32. g.drawLine(r, r, r+x1, r-y1);
  33.  
  34. x1 = (int)(r2*Math.sin(rad*m));
  35. y1 = (int)(r2*Math.cos(rad*m));
  36. g.drawLine(r, r, r+x1, r-y1);
  37.  
  38. x1 = (int)(r3*Math.sin(rad*h));
  39. y1 = (int)(r3*Math.cos(rad*h));
  40. g.drawLine(r, r, r+x1, r-y1);
  41.  
  42. int i,d = 0;
  43. for(i = 1;i <= 60;i++){
  44. x1 = (int)((r-2)*Math.sin(rad*d));
  45. y1 = (int)((r-2)*Math.cos(rad*d));
  46. g.drawString(".", r+x1, r-y1);
  47. d += 6;
  48. }
  49. //
  50. // d = 30;
  51. // for(i = 1;i <= 12;i++){
  52. // x1 = (int)((r-10)*Math.sin(rad*d));
  53. // y1 = (int)((r-10)*Math.cos(rad*d));
  54. // g.drawString(i+"", r+x1, r-y1);
  55. // d+=30;
  56. // }
  57.  
  58. Calendar now1 = new GregorianCalendar();
  59. int a, b, c;
  60. a = now1.get(Calendar.HOUR_OF_DAY);
  61. b = now1.get(Calendar.MINUTE);
  62. c = now1.get(Calendar.SECOND);
  63. g.drawString(a + ":" + b + ":" + c, 0, 10);
  64.  
  65. }
  66.  
  67. public void run() {
  68. while (true) {
  69. try {
  70. Thread.sleep(1000);
  71. } catch (Exception e) {
  72. System.err.println("出错");
  73. }
  74.  
  75. s += 6;
  76. if (s >= 360) {
  77. s = 0;
  78. m += 6;
  79.  
  80. if(m == 72||m == 144||m == 288){
  81. h+=6;
  82. }
  83.  
  84. if (m >= 360) {
  85. m = 0;
  86. h += 6;
  87. }
  88.  
  89. if(h>=360){
  90. h = 0;
  91. }
  92. }
  93. this.repaint();
  94. }
  95.  
  96. }
  97.  
  98. }

简码实验结果:

Java编写时钟 Applet 程序的更多相关文章

  1. Java编写画图板程序细节-保存已画图形

    没有Java编写画图板程序细节-保存已画图形   一.为何我们要保存画图板上已画图形呢? 有很多人会问,为什么我们一定要保存画图板上已经画好了的图形呢?原因很简单.当我们在画图板上画完自己想画的图形后 ...

  2. 使用JAVA编写电话薄程序,具备添加,查找,删除等功能

    //该程序需要连接数据库.根据word文档要求所有功能均已实现.//大部分方法基本差不多,//在查询修改的时候能输出 最大ID号 和最小ID号,并且可以对输入的ID号进行判断是否存在(具体方法请查看 ...

  3. Java实现时钟小程序【代码】

    哎,好久没上博客园发东西了,上一次还是两个月前的五一写的一篇计算器博客,不过意外的是那个程序成了这学期的Java大作业,所以后来稍微改了一下那个程序就交了上去,这还是美滋滋.然后五月中旬的时候写了一个 ...

  4. java编写的2048程序

    import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; import java.util ...

  5. Java 编写小程序,下载指定网页上的所有图片

    使用Java编写一个小程序,可以根据指定的网页地址,下载网页中的所有图片:使用到网络编程.线程池.IO和UUID的技术.具体代码如下: import java.io.File; import java ...

  6. 《java小应用程序(Applet)和java应用程序(Application)分别编写的简单计算器》

    Application和Java Applet的区别.Java语言是一种半编译半解释的语言.Java的用户程序分为两类:Java Application和Java Applet.这两类程序在组成结构和 ...

  7. Java EE开发技术课程第五周(Applet程序组件与AJAX技术)

    1.Applet程序组件 1.1.定义: Applet是采用Java编程语言编写的小应用程序,该程序可以包含在HTML(标准通用标记语言的一个应用)页中,与在页中包含图像的方式大致相同.含有Apple ...

  8. win10在html上运行java的applet程序

    Applet是采用Java编程语言编写的小应用程序,该程序可以包含在 HTML(标准通用标记语言的一个应用)页中,与在页中包含图像的方式大致相同. 含有Applet的网页的HTML文件代码中部带有 和 ...

  9. 使用Java编写并运行Spark应用程序

    我们首先提出这样一个简单的需求: 现在要分析某网站的访问日志信息,统计来自不同IP的用户访问的次数,从而通过Geo信息来获得来访用户所在国家地区分布状况.这里我拿我网站的日志记录行示例,如下所示: 1 ...

随机推荐

  1. Python测试开发必知必会-PEP

    互联网发展了许多年,不仅颠覆了很多行业,还让很多职位有了更多的用武之地.产品发布迭代速度不断加快,让测试开发这个岗位简直火得不要不要的. Python语言,作为一种更接近人来自然语言的开发语言,以简洁 ...

  2. Cypress自动化测试系列之二

    本文技术难度★★★,如果前编内容顺利执行,请继续. 如果Selenium尚无法灵活运用的读者,本文可能难度较大. “理论联系实惠,密切联系领导,表扬和自我表扬”——我就是老司机,曾经写文章教各位怎么打 ...

  3. java8学习之Stream分组与分区详解

    Stream应用: 继续举例来操练Stream,对于下面这两个集合: 需求是:将这两个集合组合起来,形成对各自人员打招呼的结果,输出的结果如: "Hi zhangsan".&quo ...

  4. Java I/O(一)流和文件类File的概述、FileInputStream和FileInputStream

    一.流概述 & InputStream.OutputStream 流包括输入流和输出流,即I/O(Input和Output),具体结构如下: I/O类都被放在java.io包中,所有的输入流类 ...

  5. luogu2014 选课[树形背包][优化成$O(n^2)$的方法]

    https://www.luogu.org/problemnew/show/P2014 树形背包的裸题..当版子好了. $f[i][j][k]$表示子树$i$选前$j$个孩子,共$k$个后代节点时的最 ...

  6. java——解决"java.io.StreamCorruptedException: invalid stream header: xxx"

    这个错误是由序列化引起的,可能的原因以及解决方法: 1.kryo对于集合(比如 Map)的反序列化会失效,报这个错误,解决办法比较暴力,不用kryo了,直接用java原生方法. 2.使用Java原生方 ...

  7. C#写入文件内容时提示:文件正被另一个人或程序使用

    创建文件后未将文件关闭 string sTransLogFile = sTransLogPath + "\\" + DateTime.Now.ToString("yyyy ...

  8. k8s测试容器test-for-k8s.yml

    生成容器 vim test-for-k8s.yml apiVersion: v1 kind: Pod metadata: name: busybox-curl labels: ccb: busybox ...

  9. [采坑] VS2015 warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失

    问题: Visual Studio 2015出现warning C4819: 该文件包含不能在当前代码页(936)中表示的字符.请将该文件保存为 Unicode 格式以防止数据丢失. 解决方案: 1. ...

  10. luogu 2993 [FJOI2014]最短路径树问题 Dijkstra+点分治

    挺简单的,但是给人一种把两个问题强行弄到一起的感觉. 十分不好写. Code: #include <queue> #include <cstdio> #include < ...