java程序: 倒计时的小程序 (GridPane, Timer, Calendar, SimpleDateFormat ...)

倒计时程序

 

涉及到的东西:

javafx简单的界面,布局,按钮,文本框,事件响应

java.util.Timer,用于定时

SimpleDateFormat用于在String和Date之间转换。

java.util.Calendar,表示时间,用于定时计算。

贴代码

  1 package countDownTimer;
  2 
  3 import java.text.ParseException;
  4 import java.text.SimpleDateFormat;
  5 import java.util.Calendar;
  6 import java.util.Date;
  7 import java.util.Timer;
  8 import java.util.TimerTask;
  9 
 10 import javafx.application.Application;
 11 import javafx.event.ActionEvent;
 12 import javafx.event.EventHandler;
 13 import javafx.geometry.HPos;
 14 import javafx.geometry.Insets;
 15 import javafx.geometry.Pos;
 16 import javafx.scene.Scene;
 17 import javafx.scene.control.Button;
 18 import javafx.scene.control.TextField;
 19 import javafx.scene.layout.GridPane;
 20 import javafx.scene.layout.Priority;
 21 import javafx.scene.text.Font;
 22 import javafx.scene.text.FontWeight;
 23 import javafx.scene.text.Text;
 24 import javafx.stage.Stage;
 25 import javafx.stage.WindowEvent;
 26 
 27 public class App extends Application {
 28 
 29     Timer timer = new Timer();
 30     Button btnStart = new Button("Start");
 31     Button btnPause = new Button("Pause");
 32     Button btnSet = new Button("Set");
 33     Text textTimeleft = new Text("HH:MM:SS");
 34     TextField textSet = new TextField("HH:MM");
 35     Calendar timenow =  Calendar.getInstance();
 36     Calendar timeZero =  Calendar.getInstance();
 37     boolean bPause = false;
 38     
 39     TimerTask timerTask = new TimerTask() {
 40 
 41         @Override
 42         public void run() {
 43 
 44             if (bPause) {
 45                 if(timenow.compareTo(timeZero)>0) {
 46                     timenow.set(Calendar.SECOND, timenow.get(Calendar.SECOND)-1);
 47                     if ((timenow.getTimeInMillis() - timeZero.getTimeInMillis()) <= 10000) {
 48                         flashText();
 49                     }
 50                 }else {
 51                     bPause = false;
 52                 }
 53                 //display
 54                 SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");  
 55                 String dateString = formatter.format(timenow.getTime()); 
 56                 textTimeleft.setText(dateString);
 57             }
 58         }
 59     };
 60     
 61     boolean bToggle = false;
 62     private void flashText() {
 63         
 64         bToggle = !bToggle;
 65         if(bToggle) {
 66             textTimeleft.setFont(Font.font("Tahoma", FontWeight.BOLD, 64));
 67         }else {
 68             textTimeleft.setFont(Font.font("Tahoma", FontWeight.NORMAL, 64));
 69         }
 70     }
 71     public static void main(String[] args) {
 72         launch(args);
 73     }
 74 
 75     @Override
 76     public void start(Stage primaryStage) throws Exception {
 77 
 78         timer.scheduleAtFixedRate(timerTask, 0, 1000);
 79         try {
 80             SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
 81             Date dateZero = sdf.parse("00:00");
 82             Date dataSet = sdf.parse("00:10");
 83             timenow.setTime(dataSet);
 84             timeZero.setTime(dateZero);
 85             textTimeleft.setText("00:10:00");
 86         } catch (ParseException e) {
 87         }
 88         
 89         btnStart.setOnAction(new EventHandler<ActionEvent>() {
 90             @Override
 91             public void handle(ActionEvent event) {
 92                 bPause = true;
 93             }
 94         });
 95         
 96         btnPause.setOnAction(new EventHandler<ActionEvent>() {
 97             @Override
 98             public void handle(ActionEvent event) {
 99                 bPause = false;
100             }
101         });
102         
103         btnSet.setOnAction(new EventHandler<ActionEvent>() {
104             @Override
105             public void handle(ActionEvent event) {
106                 SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
107                 try {
108                     timenow.setTime(sdf.parse(textSet.getText()));
109                     sdf = new SimpleDateFormat("HH:mm:ss");  
110                     String dateString = sdf.format(timenow.getTime()); 
111                     textTimeleft.setText(dateString);
112                 } catch (ParseException e) {
113                 }
114             }
115         });
116         
117 
118         GridPane grid = new GridPane();
119         grid.setAlignment(Pos.CENTER);
120         grid.setPadding(new Insets(25, 25, 25, 25));
121         
122         grid.add(btnStart, 0, 0);
123         grid.add(btnPause, 2, 0);
124         grid.add(btnSet, 2, 2);
125         textTimeleft.setFont(Font.font("Tahoma", FontWeight.NORMAL, 64));
126         grid.add(textTimeleft, 0, 1, 2, 1);
127         GridPane.setHalignment(textTimeleft, HPos.CENTER);
128         GridPane.setColumnSpan(textTimeleft, GridPane.REMAINING);
129         GridPane.setHgrow(textTimeleft, Priority.ALWAYS);
130         grid.add(textSet, 0, 2);
131 
132         Scene scene = new Scene(grid);
133         primaryStage.setScene(scene);
134         
135         primaryStage.setTitle("倒计时");
136         primaryStage.show();
137         primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
138             @Override
139             public void handle(WindowEvent event) {
140                 timer.cancel();
141             }
142         });
143     }
144 }
View Code

 

posted on 2019-01-03 16:21  zhsmtp  阅读(895)  评论(0编辑  收藏  举报