Timer定时器类
,定时器,功能是在指定的时间间隔内反复触发指定窗口的定时器事件。
TimerTask定时任务类
Timer是一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行,可以看成一个定时器,可以调度TimerTask。TimerTask是一个抽象类,实现了Runnable接口,所以具备了多线程的能力。
调用Date()函数或使用calendar类返回当前系统日期。
(Calendar 与 Date 的转换非常简单:
Calendar calendar = Calendar.getInstance();
// 从一个 Calendar 对象中获取 Date 对象
Date date = calendar.getTime();
// 将 Date 对象反应到一个 Calendar 对象中,
// Calendar/GregorianCalendar 没有构造函数可以接受 Date 对象
// 所以我们必需先获得一个实例,然后设置 Date 对象
calendar.setTime(date);)
要想格式化日期,可以使用SimpleDateFormat设置格式。
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
public class AlarmClockUI extends JFrame {
public void initUI(){
this.setTitle("太子叫你起床床");
//this.setLocationRelativeTo(null);
this.setSize(400, 500);
this.setDefaultCloseOperation(3);
this.setResizable(true);
this.setLayout(new FlowLayout());
this.setBackground(new Color(0,0,0));
SimpleDateFormat sdf = new SimpleDateFormat("YYYY年MM月D日 a hh:mm:ss");//设置显示时间的格式
Date date = new Date();//获取当前时间
String str1 = sdf.format(date);//以字符串存储
JLabel imgLabel = new JLabel("当前时间为");//把图片添加到标签上
imgLabel.setForeground(new Color(128,0,128));//设置标签颜色
imgLabel.setFont(new Font("楷体",Font.PLAIN,15));//设置标签字体
this.add(imgLabel);//把标签添加到窗体上
JTextField jtf=new JTextField(18);//创建文本框显示当前时间
jtf.setForeground(new Color(255,204,204));
this.add(jtf);
CurrentTimeTask ctt=new CurrentTimeTask();
ctt.getJTF(jtf);//传递文本框
ImageIcon bgk = new ImageIcon("image/666.jpg");//设置背景图片
JLabel imgLabel66 = new JLabel(bgk);//把图片添加到标签上
this.add(imgLabel66);//把标签加到窗体上
// 我还是把这几张违和感图片注解掉好了
// ImageIcon ima1 = new ImageIcon("image/1.png");//设置背景图片
// JLabel imgLabel1 = new JLabel(ima1);//把图片添加到标签上
// this.add(imgLabel1);//把标签加到窗体上
//
// ImageIcon ima2 = new ImageIcon("image/2.png");//设置背景图片
// JLabel imgLabel2 = new JLabel(ima2);//把图片添加到标签上
// this.add(imgLabel2);//把标签加到窗体上
//
// ImageIcon ima3 = new ImageIcon("image/3.png");//设置背景图片
// JLabel imgLabel3 = new JLabel(ima3);//把图片添加到标签上
// this.add(imgLabel3);//把标签加到窗体上
JLabel jlh=new JLabel("你想在几点几分被太子叫醒?");
jlh.setForeground(new Color(128,0,128));
jlh.setFont(new Font("楷体",Font.PLAIN,15));
this.add(jlh);
JComboBox<String> jcbh=new JComboBox<String>();//创建设置时的下拉框
jcbh.setPreferredSize(new Dimension(40,20));
for(int i=0;i<24;i++){
jcbh.addItem(i+"");
}
this.add(jcbh);
//JLabel jlm=new JLabel("你想在");
//this.add(jlm);
JComboBox<String> jcbm=new JComboBox<String>();//创建设置分的下拉框
jcbm.setPreferredSize(new Dimension(40,20));
for(int i=0;i<60;i++){
jcbm.addItem(i+"");
}
this.add(jcbm);
// JLabel jls=new JLabel("你想在");
// this.add(jls);
JComboBox<String> jcbs=new JComboBox<String>();//创建显示秒的下拉框
jcbs.setPreferredSize(new Dimension(40,20));
for(int i=0;i<60;i++){
jcbs.addItem(i+"");
}
this.add(jcbs);
ButtonGroup bg=new ButtonGroup();//创建按钮组
JRadioButton jrb1=new JRadioButton("单次");
JRadioButton jrb2=new JRadioButton("每天");
jrb1.setSelected(true);
bg.add(jrb1);
bg.add(jrb2);
this.add(jcbh);
this.add(jcbm);
this.add(jcbs);
this.add(jrb1);
this.add(jrb2);
JButton jbs=new JButton("开启");//创建按钮
// JButton jbc=new JButton("关闭");
this.add(jbs);
// this.add(jbc);感觉不需要这个按钮啊。。
ClockListener l=new ClockListener(jcbh, jcbm, jcbs, jrb1, jrb2);
jbs.addActionListener(l);
// jbc.addActionListener(l);
this.setVisible(true);
Timer time=new Timer();//创建定时器对象
time.schedule(ctt, 100, 1000);//每隔1000毫秒也就是1秒刷新一次
}
public static void main(String[] args) {
AlarmClockUI ac=new AlarmClockUI();
ac.initUI();
}
}
import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.net.MalformedURLException;
import java.util.Calendar;
import java.util.Timer;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JRadioButton;
public class ClockListener implements ActionListener{
private JComboBox<String> jcbh,jcbm,jcbs;
private JRadioButton jrb1;
private Timer time=new Timer();
private long l;//设置时间和现在时间的时间差
private AudioClip music;
public ClockListener( JComboBox<String> jcbh,JComboBox<String> jcbm,JComboBox<String> jcbs,JRadioButton jrb1,JRadioButton jrb2){
this.jcbh=jcbh;
this.jcbm=jcbm;
this.jcbs=jcbs;
this.jrb1=jrb1;
}
public void actionPerformed(ActionEvent e) {
JButton jb=(JButton)e.getSource();
if(e.getActionCommand()=="开启"){
jb.setText("关闭");
//把用户设置的时间转化为整数
int hour=Integer.parseInt(jcbh.getSelectedItem().toString());
int minute=Integer.parseInt(jcbm.getSelectedItem().toString());
int second=Integer.parseInt(jcbs.getSelectedItem().toString());
//用户设置时间
int stime=hour*3600+minute*60+second;
// System.out.println("用户设置的时间为"+hour+"h"+minute+"m"+second+"s");
//获取当前时间
Calendar c = Calendar.getInstance();
int h = c.get(Calendar.HOUR_OF_DAY);
int m=c.get(Calendar.MINUTE);
int s=c.get(Calendar.SECOND);
//System.out.println("当前为"+h+"h"+m+"m"+s+"s");
int ctime=h*3600+m*60+s;
if(ctime<stime){//计算时间差
l=stime-ctime;
}
else{
l=24*3600-ctime+stime;
}
//判断是选的单次还是每周
boolean flag=false;
if(jrb1.isSelected()==true){//单次
flag=true;
CurrentTimeTask ctt=new CurrentTimeTask();
time.schedule(ctt, l*1000);
System.out.println("到时间了!起床了!");
if(music!=null){try {
music=Applet.newAudioClip(new File("image/haha.wav.wav").toURL()); //播放音乐
music.loop(); //我设置的是循环播放..这样不起床都不行..
} catch (MalformedURLException ex) {
ex.printStackTrace();
}}
}
else{//每天
CurrentTimeTask ctt=new CurrentTimeTask();
time.schedule(ctt, l*1000, 24*3600);
System.out.println("到时间了!起床了!");
if(music!=null){try {
music=Applet.newAudioClip(new File("image/haha.wav.wav").toURL());
music.loop();
} catch (MalformedURLException ex) {
ex.printStackTrace();
}
}
}}
else{
jb.setText("开启");
CurrentTimeTask ctt=new CurrentTimeTask();
ctt.cancel();//取消任务
time.purge();
}
}
}
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimerTask;
import javax.swing.JTextField;
public class CurrentTimeTask extends TimerTask{
private JTextField jtf;
public void getJTF(JTextField jtf){
this.jtf=jtf;
}
public void run() {
SimpleDateFormat sdf = new SimpleDateFormat("YYYY年MM月D日 a hh:mm:ss");
Date date = new Date();
String str = sdf.format(date);
jtf.setText(str);
try{
Thread.sleep(1000);
}
catch(Exception e){
e.printStackTrace();
}
}
}