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

涉及到的东西:
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();
}
});
}
}
java程序: 倒计时的小程序 (GridPane, Timer, Calendar, SimpleDateFormat ...)的更多相关文章
- 「小程序JAVA实战」微信小程序简介(一)
转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-01/ 一直想学习小程序,苦于比较忙,加班比较多没时间,其实这都是理由,很多时候习惯了搬砖,习惯了固 ...
- Java之——实现微信小程序加密数据解密算法
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/79450115 一.概述 微信推出了小程序,很多公司的客户端应用不仅具有了APP.H ...
- java全栈商业小程序开发
此次开发只为学习和巩固,第一次学习开发 一.开发前需要了解: 开发框架MVVM.痛点.开源工具.VUE前端框架.微信支付模块.uni-app前端框架.小程序申请.开发工具下载.编写测试小程序.小程序结 ...
- 「小程序JAVA实战」微信小程序的简要注册流程(二)
转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-02/ 了解了小程序的历史和它未来的前景,我们开始注册小程序 注册小程序 可以参考官网介绍:http ...
- 微信小程序代码大全 - 小程序开发福利
小程序QQ交流群:131894955 小程序开发文档(Wepy) 小程序商城源码下载(weixin-app-shop) 小程序官网源码下载(weixin-app-cms) 微信管家平台JAVA版开源下 ...
- 微信小程序< 3 > ~ 微信小程序开源项目合集
简介 移动开发者想学习微信小程序需要学习一点HTML ,CSS和JS才能够比较快速的上手,参考自己学习Android学习过程,阅读源码是一个很好的方式,所以才收集了一些WeApp的开源项目. awes ...
- [小程序开发] 微信小程序内嵌网页web-view开发教程
为了便于开发者灵活配置小程序,微信小程序开放了内嵌网页能力.这意味着小程序的内容不再局限于pages和large,我们可以借助内嵌网页丰富小程序的内容.下面附上详细的开发教程(含视频操作以及注意事项) ...
- 详解封装微信小程序组件及小程序坑(附带解决方案)
一.序 上一篇介绍了如何从零开发微信小程序,博客园审核变智障了,每次代码都不算篇幅,好好滴一篇原创,不到3分钟从首页移出来了.这篇介绍一下组件封装和我的踩坑历程. 二.封装微信小程序可复用组件 首先模 ...
- 承接小程序外包 微信小程序外包 H5外包 就找北京动点软件
承接小程序外包 微信小程序外包 H5外包 就找北京动点软件 长年承接微信小程序.微信公众号开发 全职的H5开发团队,开发过几十款微信小程序公众号案例 欢迎来电咨询 QQ:372900288 微信:li ...
随机推荐
- linux的发行版
Linux的不同版本以及应用领域 1.Linux内核及发行版介绍 <1>Linux内核版本 内核(kernel)是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序,它提供了一 ...
- linux vmalloc和kmalloc
kmalloc是内核低端内存的分配,而vmalloc对应内核高端内存的分配.kmalloc()分配的内存处于3GB-high_memory之间,这一段内核空间与物理内存的映射. kmalloc保证分配 ...
- count distinct 组合使用
SELECT COUNT(DISTINCT Lbox_Sn) FROM Tab_History_Info
- shell-006:检测80端口的存活情况
注意细节问题,如下图所示 #!/bin/bash # 检测80端口是否存在 while : do n=`netstat -lnpt |grep ':80 ' |wc -l` if [ $n -eq ] ...
- Windows10 下安装 MySQL Workbench + Thinkphp
昨天,搭建了最基本的 W + I + M + P 环境,今天把 workbench 装上,毕竟效率是第一位的,还不是吾装的时候. MySQL.org 下载最新的 workbench,一路安装倒是没有任 ...
- 在linux服务器上配置anaconda和Tensorflow,并运行
1. 查看服务器上的Python安装路径: whereis python 2. 查看安装的Python版本号: python 3. 安装Anaconda: 1)下载 Anaconda2-4.0.0-L ...
- Jquery动态绑定事件处理函数 bind / on / delegate
1.bind方法绑定的事件处理函数不会应用到后来添加到DOM中的新元素.比如你在用bind给页面元素绑定事件之后,又新添加了一些与之前绑定过事件的元素一样的DOM元素,但是这些事件并不能在新的DOM元 ...
- Python爬虫常用之HtmlParser
HtmlParser,顾名思义,是解析Html的一个工具.python自带的. 一.常用属性和方法介绍 HtmlParser是一个类,在使用时一般继承它然后重载它的方法,来达到解析出需要的数据的目的. ...
- Linux设备驱动开发基础--内核定时器
1. Linux内核定时器是内核用来控制在未来某个时间点(基于jiffies)调度执行某个函数的一种机制,其实现位于 <Linux/timer.h> 和 kernel/timer.c 文件 ...
- PIE SDK矢量数据项查看
1. 功能简介 矢量数据由大量要素信息构成,矢量数据项查看可以看到数据的属性表,下面就基于PIE SDK,介绍矢量数据项查看功能的实现. 2. 功能实现说明 2.1. 实现思路及原理说明 第一步 加载 ...