倒计时程序

import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.event.AncestorEvent;
import javax.swing.event.AncestorListener;

/*对于一个数字倒计时的设计
 * 问题描述:在日常工作中经常见到倒计时的设计,那么,如何设计倒计时呢?
 * 给出一个数字,每隔一秒减一,直到减成0为止,并且,数字应该在窗体中显示,
 * 或者是直接输出每一次减去的数字,
 * 
 * 问题分析: 窗体的设计比较简单,倒计时的难点在于时间的设计,Java中常用的倒计时设计
 * 有三种,
 * 一:设置时长的倒计时;
 * 二:设置时间戳的倒计时;
 * 三:使用java.util.Timer类实现的时间戳倒计时
 * 在这个问题中,给定的数字的倒计时要求在每一秒给一个提醒,将数字减一,常见的方式有采用多线程或者Timer()类来实现,
 * 在本例中采用多线程来实现,后面会写的关于多线程的整个知识体系,故而采用多线程实现
 * Timer()类作为常用类来了解。
 * 
 * 问题解决:设计一个窗体,定义一个文本框和按钮,文本框用来输入要处理的数字,
 * 点击按钮用来开始计时,然后定义一个label,用来显示当前的时间点,当时间减为0的时候,
 * 在控制板上说明已经减到零,倒计时的实现可以用多线程来设计,
 */


public class HelloWork {
    JFrame  frame  =new  JFrame("倒计时");     
	JLabel  label =new  JLabel("请输入倒计时时间");
	JTextField  textfield = new   JTextField();
	JButton button =new  JButton("确定");
	
	
	public  static void main(String []args) {
	    new  HelloWork();	
	}
	public  HelloWork() {
	    
		frame.setBounds(70, 70, 500, 450);
	    frame.setLayout(null);
	    frame.setVisible(true);
	    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	    
	    label.setBounds(20, 20, 350, 50);
	    label.setFont(new  Font("华文行楷", 50, 20));
	    frame.add(label);
	    
	    addButton();
	    addTextField();	    
	}
	private void addTextField() {
		// TODO 自动生成的方法存根
		textfield.setBounds(50,60,200,50);
		frame.add(textfield);
 	     
 	   textfield.addKeyListener(new KeyListener(){		
			public void keyPressed(KeyEvent ke) {
			}
			public void keyReleased(KeyEvent ke) {
			}
			public void keyTyped(KeyEvent ke) {
				 
				if(ke.getKeyChar()<'0'||ke.getKeyChar()>'9') {
					ke.setKeyChar('\0');
				}			
			}
		});
		
	}
	private void addButton() {
		// TODO 自动生成的方法存根
		
		button.setBounds(300, 60, 100, 50);
		button.setFont(new  Font("华文行楷", 50, 20));
		frame.add(button);
		button.addActionListener(new  ActionListener(){
	 
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO 自动生成的方法存根
				String  getText=textfield.getText();
				if(getText.equals("")) {
					label.setText("您尚未输入,请输入!");
				}else {
					
					 Integer time = Integer.parseInt(getText);
					   // 创建线程					 
					 TimeThread  tt=new  TimeThread(label,time);				 				 
					 //timeThread tt = new timeThread(label,time);
					  tt.start();										
				}								
			}
					
		});
				
	}	
}


// 时间线程类
class TimeThread extends Thread{		
     private JLabel lblTime;
    private int time;
// 构造方法传入,显示事件的JLabel和倒计时的时间。

public TimeThread(JLabel lblTime, int time){
     this.lblTime = lblTime;
     this.time = time;
}
// run方法
 public void run(){
      while(time > 0){
      // 显示所剩时间
      this.lblTime.setText("所剩时间:" + time);
     // 所剩时间减少
     time--;
try {
     this.sleep(1000);//每个一秒计时
} catch (InterruptedException e) {
      e.printStackTrace();
     }
  }
}
}

   

 

 

 

 

你可能感兴趣的:(JAVA小程序)