以下是关于java中关于倒计时的程序,当然是采用SWING图形显示
源码一:
import java.awt.*;
import java.awt.event.*;
import java.util.Calendar;
import javax.swing.*;
public class Sleep extends JFrame {
static Sleep sleep;
JTextField jf;
JButton jButton1;
JButton jButton2;
Calendar now;
int hour;
int hourEnd;
int minute;
int minutend;
int second;
int secondend;
int hourend;
int minutePlus;
int secondPlus;
Thread t;
boolean right = true;
public Sleep() {
setSize(300, 200);
jf = new JTextField(25);
jf.setText("单击按纽进行相应的操作");
jButton1 = new JButton("显示时间剩余时间");
jButton2 = new JButton("暂停");
Container container = getContentPane();
container.setLayout(new FlowLayout());
container.add(jf, BorderLayout.NORTH);
container.add(jButton1);
container.add(jButton2);
now = Calendar.getInstance();
hourEnd = now.get(Calendar.HOUR_OF_DAY) + 1;
minutePlus = now.get(Calendar.MINUTE);
secondPlus = now.get(Calendar.SECOND);
t = new Thread(new Runnable() {
public void run() {
while (true) {
while (right) {
try {
Thread.sleep(100);
jf.setText(CalTime());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
});
t.start();
jButton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
right = true;
}
});
jButton2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent g) {
right = false;
}
});
setVisible(true);
}
public String CalTime() {
now = Calendar.getInstance();
hour = now.get(Calendar.HOUR_OF_DAY);
minute = now.get(Calendar.MINUTE);
second = now.get(Calendar.SECOND);
if (hourEnd >= hour) {
hourend = hourEnd - hour;
secondend = 60 - second+secondPlus;
minutend = 59 - minute+minutePlus;
}
return "2小时倒计时hour: " + hourend + " minute: " + minutend
+ " second: " + secondend;
}
public static void main(String args[]) {
Sleep sleep = new Sleep();
sleep.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
} 源码二:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Count extends JFrame implements ActionListener{
private static final long serialVersionUID = -3439634693767815667L;
private JLabel startTime,pastTime,label1,label2;
private JButton ok;
private StringBuffer str;
private int y,m,d;
private boolean runflag=true;
public Count(){
super("倒计时牌");
init();
this.setSize(450,150);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int h = (int) d.getHeight() / 3;
int w = (int) d.getWidth() / 3;
this.setLocation(w, h);
this.setVisible(true);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
int exit=JOptionPane.showConfirmDialog(Count.this, "确定退出吗?", "退出", JOptionPane.OK_CANCEL_OPTION);
if(exit==JOptionPane.OK_OPTION)
System.exit(0);
}
});
}
private void init(){
label1=new JLabel("距2013年圣诞节还有:");
label2=new JLabel();
startTime=new JLabel("开始时间:");
pastTime=new JLabel("已过时间:");
JPanel north=new JPanel();
north.setLayout(new BorderLayout());
north.add(label1,BorderLayout.CENTER);
north.add(startTime,BorderLayout.NORTH);
this.add(north,BorderLayout.NORTH);
this.add(label2,BorderLayout.CENTER);
JPanel south=new JPanel();
south.setLayout(new BorderLayout());
JPanel south_center=new JPanel();
Calendar c=Calendar.getInstance();
ok=new JButton("开始计时");
south_center.add(ok);
south.add(south_center,BorderLayout.CENTER);
south.add(pastTime,BorderLayout.NORTH);
this.add(south,BorderLayout.SOUTH);
ok.addActionListener(this);
label1.setFont(new Font("宋体",Font.BOLD,20));
label2.setFont(new Font("宋体",Font.BOLD,26));
label1.setForeground(new Color(154,0,255));
label2.setForeground(Color.RED);
}
public synchronized void stopthread(){
runflag=false;
}
public synchronized void startthread(){
runflag=true;
}
public synchronized boolean getrunflag(){
return runflag;
}
class MyThread extends Thread{
Calendar target=null;
Calendar startTime=null;
long targetInMill=0;
long startInMill=0;
private MyThread(int y,int m,int d){
target=new GregorianCalendar(y,m-1,d);
startTime=Calendar.getInstance();
startInMill=startTime.getTimeInMillis();
targetInMill=target.getTimeInMillis();
}
public void run(){
while(runflag){
runflag=true;
Calendar today=new GregorianCalendar();
long todayInMill=today.getTimeInMillis();
long dd=targetInMill-todayInMill;
long dis=dd/1000;
StringBuffer d = new StringBuffer();
int day=(int) (dis/(3600*24));
d.append(day).append(" 天 ");
label2.setText(d.toString());
pastTime();
if(dd<=0){
ok.setText("重新开始");
JOptionPane.showMessageDialog(Count.this, "时间到");
break;
}
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private void pastTime(){
Calendar today=new GregorianCalendar();
long nowInMill=today.getTimeInMillis();
long dd=nowInMill-startInMill;
long dis=dd/1000;
long ms=(dd/100)%10;
long mms=(dd/10)%10;
StringBuffer d = new StringBuffer();
int day=(int) (dis/(3600*24));
int hour=(int) (dis%(3600*24)/3600);
int min=(int) (dis%3600/60);
int sec=(int) (dis%60);
d.append(day);
StringBuffer s=new StringBuffer();
s.append(d + " 天 ").append(intToString(hour)+" 小时 ").append(intToString(min)+" 分 ").append(intToString(sec)+" 秒").append(ms).append(" "+mms);
pastTime.setText("已过时间:"+s.toString());
}
}
public String intToString(int i){
str = new StringBuffer(100);
if(i<10){
str.append(0).append(i);
}
return str.toString();
}
public void actionPerformed(ActionEvent e) {
String str=e.getActionCommand();
MyThread t=null;
if(str.equals("开始计时")){
try {
this.startthread();
startTime.setText("开始时间:"+new Timestamp(System.currentTimeMillis()));
// ok.setEnabled(false);
ok.setText("停止");
t=new MyThread(2013,12,25);
t.start();
} catch (NumberFormatException e1) {
e1.printStackTrace();
}
}
if(str.equals("停止") || str.equals("重新开始")){
this.stopthread();
ok.setText("开始计时");
}
}
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
new Count();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (UnsupportedLookAndFeelException e) {
e.printStackTrace();
}
}
}