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 ...
随机推荐
- 小米Air安装Arch Linux之图形界面配置(Gnome 和 sway)持续更新中……
0. 前言 上一篇文章简单讲述了在小米Air上安装Arch Linux的经验,但是安装完后基本系统后,还需要额外的配置才能进到日常使用.下文简单列举一些步骤. 1. 参考网站 主要还是参考ARCH W ...
- 将UTC日期字符串转为本地时间字符串,如@"yyyy-MM-dd'T'HH:mm:ssZ"转换为本地时间
由于苹果商店上线应用24小时内会不稳定,更新提醒可能会陷入死循环,更新提醒需要24小时后弹出,需要把苹果返回的上线时间转换为本地时间故写了下边的方法: //将UTC日期字符串转为本地时间字符串//输入 ...
- 【BZOJ1016】【Luogu P4208】 [JSOI2008]最小生成树计数 最小生成树,矩阵树定理
蛮不错的一道题,遗憾就遗憾在数据范围会导致暴力轻松跑过. 最小生成树的两个性质: 不同的最小生成树,相同权值使用的边数一定相同. 不同的最小生成树,将其都去掉同一个权值的所有边,其连通性一致. 这样我 ...
- 【HDU6703】array
题目大意:给定一个 N 个数字的排列,需要支持两种操作:对某个位置的数字 + 1e7,查询区间 [1, r] 中最小的不等于区间中任何一个数字的数. 题解:本题证明了对于 50W 的数据来说,\(O( ...
- VS开发框架DevExtreme v19.1全解析!Windows资源管理器UX值得拥有
行业领先的.NET界面控件DevExpress 正式发布了v19.1版本,本文将以系列文章的方式为大家介绍DevExtreme Complete Subscription v19.1中全新发布的文件管 ...
- Fiddler debug 拦截文件
前言 前端每次本地调试的需要重新build文件,而且如果当前文件是在另外一个项目中使用,则还需要拷贝到另外一个项目下面.这个工作很耗时.如果使用替换包,可以节省很多时间,也便于开发. 解决方案 用Fi ...
- 【转】linux中fork()函数详解
原文链接:http://blog.csdn.net/jason314/article/details/5640969#comments 总结:面宝P268 fork()的意思是进程从这里开始分叉,分成 ...
- Python在VSCode环境抓取TuShare数据存入MongoDB环境搭建
本文出自:https://www.cnblogs.com/2186009311CFF/p/11573094.html 总览 此文分为5个部分 第一:Anaconda(下载和安装) 第二:VSCode( ...
- win10 1903 更改文字大小
标题栏 - 菜单 - 消息框 - 调色板标题11- 图标 - 工具提示 - Caption 标题 的 宽/高 - ; 14的宽高 - 菜单 的 宽/高 - ; 的宽高 -; 设置 注册表 HKEY_C ...
- [深度学习] pytorch学习笔记(2)(梯度、梯度下降、凸函数、鞍点、激活函数、Loss函数、交叉熵、Mnist分类实现、GPU)
一.梯度 导数是对某个自变量求导,得到一个标量. 偏微分是在多元函数中对某一个自变量求偏导(将其他自变量看成常数). 梯度指对所有自变量分别求偏导,然后组合成一个向量,所以梯度是向量,有方向和大小. ...