谁有用java的application编写的倒计时钟代码?

是一个这样的倒计时钟:输入一个时间 比如120分钟 按开始后 倒计时开始.在中途可以选择暂停.在剩下1分钟时会有提示.要用application编写的哦.麻烦各位高手了.解析:package hello;import java.awt.*;import java.applet.*;import java.awt.event.*;import java.util.*;import java.awt.geom.*;public...
谁有用java的application编写的倒计时钟代码?
分类: 电脑/网络 >> 程序设计 >> 其他编程语言
问题描述:

是一个这样的倒计时钟:输入一个时间 比如120分钟 按开始后 倒计时开始.在中途可以选择暂停.在剩下1分钟时会有提示.

要用application编写的哦.麻烦各位高手了.

解析:

package hello;

import java.awt.*;

import java.applet.*;

import java.awt.event.*;

import java.util.*;

import java.awt.geom.*;

public class T extends Applet implements Runnable{

Thread tHour = null,tMinute = null,tSecond = null;表示时针,分针和秒针的线程

int hour_a,hour_b,minute_a,minute_b,second_a,second_b;表示时针,分针,秒针端点的整型变量

int hour = 0,minute = 0,second = 0;获取当前时间的整型变量

绘制时针,分针和秒针的Graphics对象

Graphics g_second = null,g_minute = null,g_hour =null;

存放表盘刻度的数组,供指针走动时使用

double point_x[] = new double[61],point_y[] = new double[61];

存放表盘刻度的数组,供绘制表盘使用

double scaled_x[] = new double[61],scaled_y[] = new double[61];

判断小程序是否重新开始的变量

int start_count = 0;

public void init(){

g_hour = this.getGraphics();

g_hour.setColor(Color.CYAN);

g_second = this.getGraphics();

g_second.setColor(Color.RED);

g_minute = this.getGraphics();

g_minute.setColor(Color.blue);

g_second.translate(200,200);进行坐标系统变换,将新坐标系原点设在(200,200)处

g_minute.translate(200,200);

g_hour.translate(200,200);

point_x[0] = 0; point_y[0] = -120;各个时针12点处的位置坐标(按新坐标系的坐标)

scaled_x[0] = 0;scaled_y[0] = -140;12点处的刻度位置坐标(按新坐标系的坐标)

double jiaodu = 6*Math.PI/180;

表盘分割成60分,将分割点的坐标存放在数组中

for(int i = 0; i < 60; i++){

point_x[i+1] = point_x[i]*Math.cos(jiaodu)-Math.sin(jiaodu)*point_y[i];

point_y[i+1] = point_y[i]*Math.cos(jiaodu) + point_x[i]*Math.sin(jiaodu);

}

point_x[60] = 0; point_y[60] = -120;

for(int i = 0; i < 60; i++){

scaled_x[i+1] = scaled_x[i]*Math.cos(jiaodu)-Math.sin(jiaodu)*scaled_y[i];

scaled_y[i+1] = scaled_y[i]*Math.cos(jiaodu) + Math.sin(jiaodu)*scaled_x[i];

}

scaled_x[60]= 0;

scaled_y[60] = -140;

}

public void start(){

每当小程序重新开始时,首先消灭线程,然后重新开始创建线程

if(start_count >= 1){

tSecond.interrupt();

tMinute.interrupt();

tHour.interrupt();

}

tSecond = new Thread(this);

tMinute = new Thread(this);

tHour = new Thread(this);

tSecond.start();

tMinute.start();

tHour.start();

start_count++;

if(start_count >= 2) start_count = 1;

}

public void stop()

{

tSecond.interrupt();

tMinute.interrupt();

tHour.interrupt();

}

public void paint(Graphics g){

this.start();

g.drawOval(50,50,300,300);表盘的外圈

g.translate(200,200);

绘制表盘的小刻度和大刻度

for(int i = 0 ; i < 60; i++){

if(i%5 == 0){

g.setColor(Color.BLACK);

g.fillOval((int) scaled_x[i],(int) scaled_y[i],10,10);

}

else

g.fillOval((int)scaled_x[i],(int)scaled_y[i],5,5);

}

}

public void run(){

获取本地时间

Date date = new Date();

String s=date.toString();

hour=Integer.parseInt(s.substring(11,13));

minute = Integer.parseInt(s.substring(14,16));

second = Integer.parseInt(s.substring(17,19));

if(Thread.currentThread() == tSecond){

second_a =(int)point_x[second];

second_b = (int)point_x[second];

g_second.drawLine(0,0,second_a,second_b);秒针的初始位置

g_second.drawString("秒",second_a,second_b);

int i = second;

while(true){

try{

tSecond.sleep(1000);

Color c = getBackground();

g_second.setColor(c);

g_second.drawLine(0,0,second_a,second_b);用背景色清除前一秒时的秒针

g_second.drawString("秒",second_a,second_b);

如果秒针与分针重合,恢复分针的显示

if((second_a == minute_a)&&(second_b == minute_b)){

g_minute.drawLine(0,0,minute_a,minute_b);

g_minute.drawString("分",minute_a,minute_b);

}

如果秒针与时针重合,恢复时针的显示

if((second_a == hour_a)&&(second_b == hour_b)){

g_hour.drawLine(0,0,hour_a,hour_b);

g_hour.drawString("时",hour_a,hour_b);

}

}

catch(InterruptedException e){

Color c = getBackground();

g_second.setColor(c);

g_second.drawLine(0,0,second_a,second_b);用背景色清除秒针

g_second.drawString("秒",second_a,second_b);

return;

}

秒针向前走一个单位

second_a=(int)point_x[(i+1)%60];

second_b = (int)point_y[(i+1)%60]; 每一秒走6度(一个单位格)

g_second.setColor(Color.red);

g_second.drawLine(0,0,second_a,second_b);

g_second.drawString("秒",second_a,second_b);

i++;

}

}

if(Thread.currentThread() == tMinute){

minute_a = (int)point_x[minute];

minute_b = (int)point_y[minute];

g_minute.drawLine(0,0,minute_a,minute_b);

int i = minute;

while(true){

第一次过60-second秒就前进一分钟,以后每过60秒前进一分钟

try{

tMinute.sleep(1000*60 - second*1000);

second = 0;

Color c = getBackground();

g_minute.setColor(c);

g_minute.drawLine(0,0,minute_a,minute_b);

g_minute.drawString("分",minute_a,minute_b);

if((hour_a == minute_a)&&(hour_b== minute_b)){

g_hour.drawLine(0,0,minute_a,minute_b);

g_hour.drawString("时",hour_a,hour_b);

}

}

catch(InterruptedException e){

return;

}

minute_a = (int)point_x[(i+1)%60];

minute_b = (int)point_y[(i+1)%60];

g_minute.setColor(Color.BLUE);

g_minute.drawLine(0,0,minute_a,minute_b);

g_minute.drawString("分",minute_a,minute_b);

i++; second = 0;

}

}

if(Thread.currentThread() == tHour){

int h = hour%12;

hour_a = (int)point_x[h*5 + minute/12];

hour_b = (int)point_y[h*5 + minute/12];

int i = h*5 + minute/12;

g_hour.drawLine(0,0,hour_a,hour_b);

g_hour.drawString("时",hour_a,hour_b);

while(true){

第一次过12-minute%12分钟就前进一个刻度,以后每过12分钟前进一个刻度

try{

tHour.sleep(1000*60*12 - 1000*60*(minute%12) - second *1000);

minute = 0;

Color c = getBackground();

g_hour.setColor(c);

g_hour.drawLine(0,0,hour_a,hour_b);

g_hour.drawString("时",hour_a,hour_b);

}

catch(InterruptedException e){

return;

}

hour_a = (int)point_x[(i+1)%60];

hour_b = (int)point_y[(i+1)%60];

g_hour.setColor(Color.CYAN);

g_hour.drawLine(0,0,hour_a,hour_b);

g_hour.drawString("时",hour_a,hour_b);

i++;minute = 0;

}

}

}

}2022-10-14
mengvlog 阅读 8 次 更新于 2025-07-20 10:00:22 我来答关注问题0
  •  文暄生活科普 5分钟理解Android中的上下文!!!

    ContextWrapper.java中getApplicationContext方法执行过程:调用ContextImpl对象的getApplicaitionContext方法 ContextImpl.java中getApplicationContext方法的执行过程:1.若LoadedApk对象不为空,则调用LoadedApk对象的getApplication方法获取 2.若LoadedApk对象为空,则调用ActivityThread对象的getApplication方法 当应用程序...

  •  检义大雅畅 APPLICATION是什么

    APPLICATION是应用程序意思。一、含义 n. 应用;申请;专心;应用程序。二、用法 application的基本意思是“申请,申请表,申请书”,通常指非常正规、供有关部门考虑的书面“申请,请求”,常用于正式和书面语中。application也可作“实际应用,用途”“施用,敷用,涂抹”解。I didn't receive an ackn...

  •  情感解说家17 吃饭的饭可以用哪些形近字代替?

    Java 的Frame和Panel的区别 [Panel] Panel is the simplest container class. A panel provides space in which an ap plication can attach any other ponent, including other panels. ...

  •  terry11 weblogic部署项目,开启服务时报的错Failed to complete the deployment task with ID 0 for the applica

    Context path '/' is already in use by the module,说明"/",已经被使用了,换个上下文发布吧。

  •  情感解说家17 饭的形近字有哪些?

    你在用Jbuilder建立一个Applica tion(比如TestApp和TestAppFrame)的时候,在你的框架档案TestAppFrame里就会自动 生成一个叫contentPane的JPanel物件。 Panel是一般容器,可以自身巢状(比如在panel1里嵌入panel2);但Frame已经是 顶层容器了,自身不能巢状。 我们用得最多的JFrame和JPanel,就...

檬味博客在线解答立即免费咨询

Java相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部