當前位置:編程學習大全網 - 編程語言 - 誰有用java的application編寫的倒計時鐘代碼?

誰有用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;

}

}

}

}

  • 上一篇:基因編程的哲學問題
  • 下一篇:我是成都信息工程大學電氣工程及其自動化大三的學生,學習雖然沒有什
  • copyright 2024編程學習大全網