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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异