Java编写时钟 Applet 程序
简单分析:
- package clockApplet;
- import java.applet.Applet;
- import java.awt.Color;
- import java.awt.Graphics;
- import java.util.Calendar;
- import java.util.GregorianCalendar;
- public class ClockApplet extends Applet implements Runnable {
- /* 成员变量 */
- int x = 0, y = 0, r = 100; // (x,y)为(0,0)点,表示原点
- int h, m, s; // 时,分,秒
- double rad = Math.PI / 180; // 1°
- /* 初始化函数 */
- public void init() {
- Calendar now = new GregorianCalendar(); /*
- * GregorianCalendar(标准阳历)
- * 是Calendar(日历)【国际环境下都能运行的程序】
- * 的子类
- */
- s = now.get(Calendar.SECOND) * 6; // 秒针转换成角度:1秒,秒针动一次,转动6°
- m = now.get(Calendar.MINUTE) * 6; // 分针转换为角度:1分,分针动一次,转动6°
- h = now.get(Calendar.HOUR) * 30 + now.get(Calendar.MINUTE) / 12 * 6; // 先把分化为小时,再乘以6°
- /*
- * Calendar.HOUR 显示范围:1-12(无论AM还是PM) Calendar.HOUR_OF_DAY 显示范围:1-24(包括PM
- */
- Thread t = new Thread(this);
- t.start();
- }
- /*
- * 画图函数 注意:Applet的画图界面以左上角为(0,0)原点坐标,即所有坐标均大于等于0,该点的坐标越大(且>0)
- */
- public void paint(Graphics g) {
- super.paint(g);
- /*
- * paint(g)函数会重绘图像,要加上super.paint(g),表示在原来图像的基础上,再画图。
- * 如果不加super.paint(g),重绘时,会将原有的绘制清空,再根据paing(g)函数绘制。
- */
- g.setColor(Color.BLACK);
- g.drawOval(x, y, r * 2, r * 2);// 画表
- /* drawOval(x,y,width,height)以矩形恰好框住椭圆,矩形左上角的顶点坐标为(x,y) */
- // 秒针
- int x1 = (int) (90 * Math.sin(rad * s));
- int y1 = (int) (90 * Math.cos(rad * s));
- g.drawLine(r, r, r + x1, r - y1);
- /* drawLine(a,b,c,d) (a,b)为起始坐标 (c,d)为终点坐标 */
- // 分针
- x1 = (int) (80 * Math.sin(rad * m));
- y1 = (int) (80 * Math.cos(rad * m));
- g.drawLine(r, r, r + x1, r - y1);
- // 时针
- x1 = (int) (60 * Math.sin(rad * h));
- y1 = (int) (60 * Math.cos(rad * h));
- g.drawLine(r, r, r + x1, r - y1);
- // 画数字
- int d = 30;
- for (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 + "", r + x1, r - y1);
- d += 30;
- }
- // 画刻度
- d = 0;
- for (int i = 1; i <= 60; i++) {
- x1 = (int) ((r - 2) * Math.sin(rad * d));
- y1 = (int) ((r - 2) * Math.cos(rad * d));
- g.drawString(".", r + x1, r - y1);
- d += 6;
- }
- // 显示时间
- Calendar now1 = new GregorianCalendar();
- int a, b, c;
- a = now1.get(Calendar.HOUR_OF_DAY);
- b = now1.get(Calendar.MINUTE);
- c = now1.get(Calendar.SECOND);
- g.drawString(a + ":" + b + ":" + c, 0, 10);
- }
- // 实现Runnable
- public void run() {
- while (true) {
- try {
- Thread.sleep(1000);// 间隔一秒
- } catch (Exception ex) {
- }
- // 秒针每次走6°
- s += 6;
- // 秒针归零
- if (s >= 360) {
- s = 0;
- m += 6;
- // 分针走72°,时针走6° 分针的12倍,时针走一次
- if (m == 72 || m == 144 || m == 288) {
- h += 6;
- }
- // 分针归零
- if (m >= 360) {
- m = 0;
- h += 6;
- }
- // 时针归零
- if (h >= 360) {
- h = 0;
- }
- }
- // 重新绘制
- this.repaint();
- }
- }
- }
无注释简码:
- package clockApplet;
- import java.applet.Applet;
- import java.awt.Color;
- import java.awt.Graphics;
- import java.util.Calendar;
- import java.util.GregorianCalendar;
- public class Test extends Applet implements Runnable {
- int x = 0,y = 0,r = 100,r1 = 90,r2 = 80,r3 = 60;
- double rad = Math.PI/180;
- int s,m,h;
- public void init(){
- Calendar calendar = new GregorianCalendar();
- s = calendar.get(Calendar.SECOND)*6;
- m = calendar.get(Calendar.MINUTE)*6;
- h = calendar.get(Calendar.HOUR)*30 + calendar.get(Calendar.MINUTE)/12*6;
- Thread thread = new Thread(this);
- thread.start();
- }
- public void paint(Graphics g) {
- super.paint(g);
- g.setColor(Color.black);
- g.drawOval(x, y, r*2, r*2);
- int x1 = (int)(r1*Math.sin(rad*s));
- int y1 = (int)(r1*Math.cos(rad*s));
- g.drawLine(r, r, r+x1, r-y1);
- x1 = (int)(r2*Math.sin(rad*m));
- y1 = (int)(r2*Math.cos(rad*m));
- g.drawLine(r, r, r+x1, r-y1);
- x1 = (int)(r3*Math.sin(rad*h));
- y1 = (int)(r3*Math.cos(rad*h));
- g.drawLine(r, r, r+x1, r-y1);
- int i,d = 0;
- for(i = 1;i <= 60;i++){
- x1 = (int)((r-2)*Math.sin(rad*d));
- y1 = (int)((r-2)*Math.cos(rad*d));
- g.drawString(".", r+x1, r-y1);
- d += 6;
- }
- //
- // d = 30;
- // for(i = 1;i <= 12;i++){
- // x1 = (int)((r-10)*Math.sin(rad*d));
- // y1 = (int)((r-10)*Math.cos(rad*d));
- // g.drawString(i+"", r+x1, r-y1);
- // d+=30;
- // }
- Calendar now1 = new GregorianCalendar();
- int a, b, c;
- a = now1.get(Calendar.HOUR_OF_DAY);
- b = now1.get(Calendar.MINUTE);
- c = now1.get(Calendar.SECOND);
- g.drawString(a + ":" + b + ":" + c, 0, 10);
- }
- public void run() {
- while (true) {
- try {
- Thread.sleep(1000);
- } catch (Exception e) {
- System.err.println("出错");
- }
- s += 6;
- if (s >= 360) {
- s = 0;
- m += 6;
- if(m == 72||m == 144||m == 288){
- h+=6;
- }
- if (m >= 360) {
- m = 0;
- h += 6;
- }
- if(h>=360){
- h = 0;
- }
- }
- this.repaint();
- }
- }
- }
简码实验结果:
Java编写时钟 Applet 程序的更多相关文章
- Java编写画图板程序细节-保存已画图形
没有Java编写画图板程序细节-保存已画图形 一.为何我们要保存画图板上已画图形呢? 有很多人会问,为什么我们一定要保存画图板上已经画好了的图形呢?原因很简单.当我们在画图板上画完自己想画的图形后 ...
- 使用JAVA编写电话薄程序,具备添加,查找,删除等功能
//该程序需要连接数据库.根据word文档要求所有功能均已实现.//大部分方法基本差不多,//在查询修改的时候能输出 最大ID号 和最小ID号,并且可以对输入的ID号进行判断是否存在(具体方法请查看 ...
- Java实现时钟小程序【代码】
哎,好久没上博客园发东西了,上一次还是两个月前的五一写的一篇计算器博客,不过意外的是那个程序成了这学期的Java大作业,所以后来稍微改了一下那个程序就交了上去,这还是美滋滋.然后五月中旬的时候写了一个 ...
- java编写的2048程序
import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; import java.util ...
- Java 编写小程序,下载指定网页上的所有图片
使用Java编写一个小程序,可以根据指定的网页地址,下载网页中的所有图片:使用到网络编程.线程池.IO和UUID的技术.具体代码如下: import java.io.File; import java ...
- 《java小应用程序(Applet)和java应用程序(Application)分别编写的简单计算器》
Application和Java Applet的区别.Java语言是一种半编译半解释的语言.Java的用户程序分为两类:Java Application和Java Applet.这两类程序在组成结构和 ...
- Java EE开发技术课程第五周(Applet程序组件与AJAX技术)
1.Applet程序组件 1.1.定义: Applet是采用Java编程语言编写的小应用程序,该程序可以包含在HTML(标准通用标记语言的一个应用)页中,与在页中包含图像的方式大致相同.含有Apple ...
- win10在html上运行java的applet程序
Applet是采用Java编程语言编写的小应用程序,该程序可以包含在 HTML(标准通用标记语言的一个应用)页中,与在页中包含图像的方式大致相同. 含有Applet的网页的HTML文件代码中部带有 和 ...
- 使用Java编写并运行Spark应用程序
我们首先提出这样一个简单的需求: 现在要分析某网站的访问日志信息,统计来自不同IP的用户访问的次数,从而通过Geo信息来获得来访用户所在国家地区分布状况.这里我拿我网站的日志记录行示例,如下所示: 1 ...
随机推荐
- Python测试开发必知必会-PEP
互联网发展了许多年,不仅颠覆了很多行业,还让很多职位有了更多的用武之地.产品发布迭代速度不断加快,让测试开发这个岗位简直火得不要不要的. Python语言,作为一种更接近人来自然语言的开发语言,以简洁 ...
- Cypress自动化测试系列之二
本文技术难度★★★,如果前编内容顺利执行,请继续. 如果Selenium尚无法灵活运用的读者,本文可能难度较大. “理论联系实惠,密切联系领导,表扬和自我表扬”——我就是老司机,曾经写文章教各位怎么打 ...
- java8学习之Stream分组与分区详解
Stream应用: 继续举例来操练Stream,对于下面这两个集合: 需求是:将这两个集合组合起来,形成对各自人员打招呼的结果,输出的结果如: "Hi zhangsan".&quo ...
- Java I/O(一)流和文件类File的概述、FileInputStream和FileInputStream
一.流概述 & InputStream.OutputStream 流包括输入流和输出流,即I/O(Input和Output),具体结构如下: I/O类都被放在java.io包中,所有的输入流类 ...
- luogu2014 选课[树形背包][优化成$O(n^2)$的方法]
https://www.luogu.org/problemnew/show/P2014 树形背包的裸题..当版子好了. $f[i][j][k]$表示子树$i$选前$j$个孩子,共$k$个后代节点时的最 ...
- java——解决"java.io.StreamCorruptedException: invalid stream header: xxx"
这个错误是由序列化引起的,可能的原因以及解决方法: 1.kryo对于集合(比如 Map)的反序列化会失效,报这个错误,解决办法比较暴力,不用kryo了,直接用java原生方法. 2.使用Java原生方 ...
- C#写入文件内容时提示:文件正被另一个人或程序使用
创建文件后未将文件关闭 string sTransLogFile = sTransLogPath + "\\" + DateTime.Now.ToString("yyyy ...
- k8s测试容器test-for-k8s.yml
生成容器 vim test-for-k8s.yml apiVersion: v1 kind: Pod metadata: name: busybox-curl labels: ccb: busybox ...
- [采坑] VS2015 warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
问题: Visual Studio 2015出现warning C4819: 该文件包含不能在当前代码页(936)中表示的字符.请将该文件保存为 Unicode 格式以防止数据丢失. 解决方案: 1. ...
- luogu 2993 [FJOI2014]最短路径树问题 Dijkstra+点分治
挺简单的,但是给人一种把两个问题强行弄到一起的感觉. 十分不好写. Code: #include <queue> #include <cstdio> #include < ...