您的位置:首页 > 移动开发

【原创】java applet Clock + Timer时钟或者电子钟也行,计时功能

2010-01-11 10:58 281 查看
Code:

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/



package clock;



import java.applet.Applet;

import java.awt.BasicStroke;

import java.awt.Button;

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.TextArea;

import java.awt.TextField;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.util.Date;

import java.util.Timer;

import javax.swing.JOptionPane;



/**

*

* @author BLH

*/

public class Clock extends Applet implements ActionListener

{

//钟表变量

private int iHour;

private int iMinute;

private int iSecond;



private Button changeTime = new Button("修改时间");

private Button calculagraphStart = new Button("开始计时");

private Button calculagraphRecord = new Button("记录计时");

private Button calculagraphEnd = new Button("结束计时");



private TextField time = new TextField(15);

private TextArea record = new TextArea(10,15);



private Timer timer = new Timer();//钟表计时器间隔为1秒

private Timer calculagraph;//计时器间隔为10毫秒



//计时器变量

private int iTimeHour;

private int iTimeMinute;

private int iTimeSecond;

private int iTimeMilliSecond;



public Clock()

{

//将系统的时,分秒设定为当前时间

Date timeCurrent=new Date();

iHour=timeCurrent.getHours();

iMinute=timeCurrent.getMinutes();

iSecond=timeCurrent.getSeconds();



timer.schedule(new JobTime(), 0, 1000);//在0秒后执行此任务,每次间隔1秒,如果传递一个Data参数,就可以在某个固定的时间执行这个任务.



}

/**

* Initialization method that will be called after the applet is loaded

* into the browser.

*/

@Override

public void init() {

// TODO start asynchronous download of heavy resources

setLayout(null);



add(changeTime);

changeTime.setBounds(160, 20, 65, 25);

changeTime.addActionListener(this);



add(calculagraphStart);

calculagraphStart.setBounds(160, 50, 65, 25);

calculagraphStart.addActionListener(this);



add(calculagraphRecord);

calculagraphRecord.setBounds(160, 80, 65, 25);

calculagraphRecord.addActionListener(this);

calculagraphEnd.setEnabled(false);



add(calculagraphEnd);

calculagraphEnd.setBounds(160, 110, 65, 25);

calculagraphEnd.addActionListener(this);

calculagraphRecord.setEnabled(false);



add(time);

time.setBounds(255, 20, 100, 25);

time.setEditable(false);

add(record);

record.setEditable(false);

record.setBounds(255,50,100,100);



resize(400,200); // Set clock window size

}

// TODO overwrite start(), stop() and destroy() methods



@Override

public void start()

{



}

@Override

public void stop()

{



}

@Override

public void destroy()

{

timer.cancel();

}

@Override

public void paint(Graphics g )

{

Graphics2D g2=(Graphics2D)g;



//设置背景颜色

setBackground(Color.white);

//画表盘

g2.setStroke(new BasicStroke(4.0f));

g.setColor(Color.BLUE); //表盘颜色

//g.fillOval(0, 0, 150, 150);

g.drawOval(0, 0, 150, 150);

//getSize().height //获取窗口的高度



//绘制时钟上的12 个数字

g.setColor(Color.lightGray); //字体颜色

int angle=60,x,y,radius=65;

for(int i=1;i<=12;i++)

{

x=(int)((radius)*Math.cos(Math.PI/180*angle));

y=(int)((radius)*Math.sin(Math.PI/180*angle));

g.drawString(""+i,x+75-4,75-y+6);

angle-=30;

}

//画秒针

g2.setStroke(new BasicStroke(2.2f));

g.setColor(Color.green); //秒针颜色

int radiusOfSecond = 50;

g.drawLine(75,75,(int)(radiusOfSecond*Math.cos(Math.PI/180*(-6*(iSecond-15))))+75,75-(int)(radiusOfSecond*Math.sin(Math.PI/180*(-6*(iSecond-15)))));



//画分针

g2.setStroke(new BasicStroke(2.2f));

g.setColor(Color.blue); //秒针颜色

int radiusOfMinute = 45;

g.drawLine(75,75,(int)(radiusOfMinute*Math.cos(Math.PI/180*(-6*(iMinute-15))))+75,75-(int)(radiusOfMinute*Math.sin(Math.PI/180*(-6*(iMinute-15)))));



//画时针

g2.setStroke(new BasicStroke(2.2f));

g.setColor(Color.red); //秒针颜色

int radiusOfHour = 40;

g.drawLine(75,75,(int)(radiusOfHour*Math.cos(Math.PI/180*(-30*(iHour%12-3))))+75,75-(int)(radiusOfHour*Math.sin(Math.PI/180*(-30*(iHour%12-3)))));

//显示时分秒的值

g.setFont(new Font("TimesToman",Font.PLAIN,14));

g.setColor(Color.orange);



g.drawString(String.valueOf(iHour+" :"), 40, 180);

g.drawString(String.valueOf(iMinute+" :"), 65, 180);

g.drawString(String.valueOf(iSecond), 90, 180);

}



public void actionPerformed(ActionEvent e)

{

if(e.getSource()==changeTime)

{

setCurrentTime();

}

if(e.getSource()==calculagraphStart)

{

iTimeHour= 0;

iTimeMinute =0;

iTimeSecond = 0;

iTimeMilliSecond = 0;

calculagraph = new Timer();

calculagraph.schedule(new JobTimer(),0,10);



calculagraphEnd.setEnabled(true);

calculagraphRecord.setEnabled(true);

calculagraphStart.setEnabled(false);

}



if(e.getSource()==calculagraphRecord)

{

record.append(iTimeHour+":"+iTimeMinute+":"+iTimeSecond+":"+iTimeMilliSecond+"/n");

}



if(e.getSource()==calculagraphEnd)

{

calculagraph.cancel();

time.setText("");

record.setText("");

calculagraphEnd.setEnabled(false);

calculagraphRecord.setEnabled(false);

calculagraphStart.setEnabled(true);

}

}



//用于改变时分秒的指针值的计时类

class JobTime extends java.util.TimerTask

{

@Override

public void run()

{

// TODO Auto-generated method stub

iSecond++;

if(iSecond==60)

{

iSecond=0;

iMinute++;

}

if(iMinute==60)

{

iMinute=0;

iHour++;

}



if(iHour==24)

{

iHour=0;

}

repaint();

}

}



private void setCurrentTime()

{

String strTemp = JOptionPane.showInputDialog(null, "请输入当前小时(24小时制):");

if(strTemp==null)

{

return;

}

int iHour = Integer.parseInt(strTemp);



strTemp = JOptionPane.showInputDialog(null, "请输入当前分:");



if(strTemp==null)

{

return;

}



int iMinute = Integer.parseInt(strTemp);



strTemp = JOptionPane.showInputDialog(null, "请输入当前秒:");



if(strTemp==null)

{

return;

}



int iSecond = Integer.parseInt(strTemp);



//设定当前时间为对话框输入的时间

if (iHour >= 0 && iHour < 24)

{

this.iHour = iHour;

}



if (iMinute >= 0 && iMinute < 60)

{

this.iMinute = iMinute;

}



if (iSecond >= 0 && iSecond < 60)

{

this.iSecond = iSecond;

}

}



//计时器任务类

class JobTimer extends java.util.TimerTask

{

@Override

public void run()

{

// TODO Auto-generated method stub

iTimeMilliSecond++;

if(iTimeMilliSecond==100)

{

iTimeSecond++;

iTimeMilliSecond=0;

}

if(iTimeSecond==60)

{

iTimeMinute++;

iTimeSecond=0;

}

if(iTimeMinute==60)

{

iTimeHour++;

iTimeMinute=0;

}

time.setText(iTimeHour+":"+iTimeMinute+":"+iTimeSecond+":"+iTimeMilliSecond);

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐