倒计时程序

涉及到的东西:

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

java.util.Timer,用于定时

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

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

贴代码

 package countDownTimer;

 import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask; import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.HPos;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Priority;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javafx.stage.WindowEvent; public class App extends Application { Timer timer = new Timer();
Button btnStart = new Button("Start");
Button btnPause = new Button("Pause");
Button btnSet = new Button("Set");
Text textTimeleft = new Text("HH:MM:SS");
TextField textSet = new TextField("HH:MM");
Calendar timenow = Calendar.getInstance();
Calendar timeZero = Calendar.getInstance();
boolean bPause = false; TimerTask timerTask = new TimerTask() { @Override
public void run() { if (bPause) {
if(timenow.compareTo(timeZero)>0) {
timenow.set(Calendar.SECOND, timenow.get(Calendar.SECOND)-1);
if ((timenow.getTimeInMillis() - timeZero.getTimeInMillis()) <= 10000) {
flashText();
}
}else {
bPause = false;
}
//display
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
String dateString = formatter.format(timenow.getTime());
textTimeleft.setText(dateString);
}
}
}; boolean bToggle = false;
private void flashText() { bToggle = !bToggle;
if(bToggle) {
textTimeleft.setFont(Font.font("Tahoma", FontWeight.BOLD, 64));
}else {
textTimeleft.setFont(Font.font("Tahoma", FontWeight.NORMAL, 64));
}
}
public static void main(String[] args) {
launch(args);
} @Override
public void start(Stage primaryStage) throws Exception { timer.scheduleAtFixedRate(timerTask, 0, 1000);
try {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
Date dateZero = sdf.parse("00:00");
Date dataSet = sdf.parse("00:10");
timenow.setTime(dataSet);
timeZero.setTime(dateZero);
textTimeleft.setText("00:10:00");
} catch (ParseException e) {
} btnStart.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
bPause = true;
}
}); btnPause.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
bPause = false;
}
}); btnSet.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
try {
timenow.setTime(sdf.parse(textSet.getText()));
sdf = new SimpleDateFormat("HH:mm:ss");
String dateString = sdf.format(timenow.getTime());
textTimeleft.setText(dateString);
} catch (ParseException e) {
}
}
}); GridPane grid = new GridPane();
grid.setAlignment(Pos.CENTER);
grid.setPadding(new Insets(25, 25, 25, 25)); grid.add(btnStart, 0, 0);
grid.add(btnPause, 2, 0);
grid.add(btnSet, 2, 2);
textTimeleft.setFont(Font.font("Tahoma", FontWeight.NORMAL, 64));
grid.add(textTimeleft, 0, 1, 2, 1);
GridPane.setHalignment(textTimeleft, HPos.CENTER);
GridPane.setColumnSpan(textTimeleft, GridPane.REMAINING);
GridPane.setHgrow(textTimeleft, Priority.ALWAYS);
grid.add(textSet, 0, 2); Scene scene = new Scene(grid);
primaryStage.setScene(scene); primaryStage.setTitle("倒计时");
primaryStage.show();
primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
timer.cancel();
}
});
}
}

最新文章

  1. 161230、利用代理中间件实现大规模Redis集群
  2. 【PCB】【AD使用】Altium Designer 的entry sheet ,offsheet和port作用
  3. 争夺 &amp; KM思想
  4. Web Storage事件无法触发
  5. ios import和@class的区别
  6. hihocoder 1066 无间道之并查集
  7. Eclipse ARM IDE 开发环境
  8. 添加python虚拟环境
  9. VS2008中 VB 报错 检索 COM 类工厂中 CLSID 为 {28E68F9A-8D75-11D1-8DC3-3C302A000000} 的组件失败,原因是出现以下错误: 80040154 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))。
  10. CRT-常用命令
  11. 【数学建模】day09-聚类分析
  12. BZOJ 4555: [Tjoi2016&amp;Heoi2016]求和 (NTT + 第二类斯特林数)
  13. noip2013火柴排队_Solution
  14. Python3 join函数和os.path.join用法
  15. Vs code 设置
  16. swift中UIImageView的创建
  17. Team Foundation Server (TFS)与Project Server集成,使用DNS(友好地址)地址注册PWA
  18. Linux下安装python虚拟环境(virtualenv,vritulaenvwrapper)
  19. 怎样彻底卸载(删除)SQL server2000
  20. CentOS命令top下你不一定懂的cpu显示信息

热门文章

  1. oracle转义用单引号
  2. 【bzoj4811】[Ynoi2017]由乃的OJ 树链剖分/LCT+贪心
  3. 微服务架构下分布式事务解决方案——阿里云GTS
  4. Math.random取随机整数
  5. 最大子树和 树形dp
  6. Exadata 18.1新特性--云平台存储节点升级
  7. JAVA基础——Java 中必须了解的常用类
  8. 009 Android Fragment动态用法(实现动态菜单栏)设置控件为满屏状态
  9. 转载Java NIO中的Files类的使用
  10. java的Spring学习2- junit