【原创】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);
}
}
}
/*
* 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);
}
}
}
相关文章推荐
- 计数器(Counter)、时钟(Clock)、告警器(Alarm)、定时器(Timer)
- Java:利用java Timer类实现定时执行任务的功能
- 有秒计时的数字时钟(Java实现)
- 使用 FlipClock.js 制作精美的时钟、定时器和倒计时功能
- 小时钟程序-原创Java
- Android中 完美实现 计时 倒计时 时间间隔处理等功能实现 by CountDownTimer
- 浙大Java进阶mooc第二周作业---------有秒针计时的数字时钟
- JAVA-如何实现TIMER功能
- .Net语言 APP开发平台——Smobiler学习日志:如何快速实现Timer计时功能
- java.applet.Applet的网络功能(二)
- JAVA-如何实现TIMER功能
- java实现动态时钟并设置闹钟功能
- java 打印功能示例(服务器端、web端Applet实现)
- 定时器中实现数据库表数据移动的功能,Exception in thread "Timer-0" isExist java.lang.NullPointerException定时器中线程报错。
- java spring实现定时器功能Timer
- 在一个程序中需要用到全局变量(在多个class之间共享数据),请问如何定义具有这种功能的变量?或者是否有其他的方法解决多个class之间的数据共享(尽量简单实现)。 首先应该明确 Java中没有全局变
- JAVA写的无限分类(原创)(功能待完善)http://hi.baidu.com/wolftotem1984/blog/item/0fa3ac54b79f501f3a2935fa.html/cmtid/ed62b258ab7de9df9c8204c6
- java自带定时任务功能(Timer&TimerTask)
- Java程序显示正在运行的时钟(timer类)
- S5PV210 sys_clock编程流程 系统时钟功能模块操作