- /*
- * 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);
- }
- }
- }