倒计时牌

import java.awt.BorderLayout;
import java.util.Calendar;
import java.util.GregorianCalendar;

import javax.swing.JFrame;
import javax.swing.JLabel;


public class TimeFrame
{
    private JFrame jf;
    private JLabel label1;
    private JLabel label2;
   
    public TimeFrame()
    {
        jf = new JFrame("倒计时牌");
        label1 = new JLabel("距离2011年春节还有:");
        label2 = new JLabel(""); //显示剩余时间
        jf.add(label1,BorderLayout.NORTH); //添加组件到窗体上方
        jf.add(label2,BorderLayout.CENTER); //添加组件到窗体的中间
       
        //GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系
        Calendar cal = new GregorianCalendar(2011,Calendar.FEBRUARY,3,0,0,0); //Calendar是一个抽象类
        Thread t = new RefreshTimeThread(cal);
        t.start(); //启动线程
    }
   
    /**
     * 封装窗体的显示方法
     *
     */
    public void showMe()
    {
        jf.setBounds(200, 200, 300, 150); //设置窗体的位置及大小
        jf.setVisible(true);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置单击窗体关闭按钮时退出程序
    }
   
    public static void main(String args[])
    {
        new TimeFrame().showMe();
    }
   
    class RefreshTimeThread  extends Thread
    {
        private Calendar targetTime;
       
        //构造方法,传入倒计时的时间
        public  RefreshTimeThread(Calendar targetTime)
        {
            this.targetTime = targetTime;
        }
       
        public void run() //重写run()方法
        {
            while(true)
            {
                //创建GregorianCalendar对象即现在的时间
                Calendar todayTime = new GregorianCalendar();    //在具有默认语言环境的默认时区内使用当前时间构造一个默认的 GregorianCalendar
                //定义long类型的seconds,表示剩余的秒数
                long seconds = (targetTime.getTimeInMillis() - todayTime.getTimeInMillis()) / 1000;
                if(seconds <= 0)
                {
                    label2.setText("时间到!");
                    break;
                }
                int day = (int)(seconds/(24*60*60));
                int hour = (int)(seconds/(60*60)%24);
                int min = (int)(seconds/60%60);
                int sec = (int)(seconds%60);
                String str = day + "天" + hour + "时" + min + "分" + sec + "秒";
                label2.setText(str);//刷新label2上的时间
                try
                {
                    Thread.sleep(1000); //每次睡一秒,则计时牌时间每秒变一次
                } catch (Exception e)
                {
                    e.printStackTrace();
                }
            }
        }
    }
}

你可能感兴趣的:(倒计时牌)