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 ...
随机推荐
- The server of Apache (二)——apache服务客户端验证
一.确定网站名称.IP地址 地址为: 192.168.1.1 域名为: www.benet.com 二.配置可用的DNS域名服务或者修改本地hosts记录 ~] # vim /etc/hosts ...
- 滴滴插件化方案 VirtualApk 源码解析
那么其中的难点很明显是对四大组件支持,因为大家都清楚,四大组件都是需要在AndroidManifest中注册的,而插件apk中的组件是不可能预先知晓名字,提前注册中宿主apk中的,所以现在基本都采用一 ...
- CSS中#和.的区别
id:用来定义页面中大的样式,如栏目划分,顶部,正文,底部等:用#top的形式来定义: class:用来定义一些比较细节的样式,如具体的一个菜单,一行文字等,用.text的形式来定义. 定义HTML中 ...
- Fast Matrix Operations UVA - 11992 线段树
题意翻译 有一个r行c列的全0矩阵,有以下三种操作. 1 X1 Y1 X2 Y2 v 子矩阵(X1,Y1,X2,Y2)的元素加v 2 X1 Y1 X2 Y2 v 子矩阵(X1,Y1,X2,Y2)的元素 ...
- python pika简单实现RabbitMQ通信
Windows上安装及启动RabbitMQ https://blog.csdn.net/hzw19920329/article/details/53156015 安装python pika库 pip ...
- ionic3 IPX留海适配
解决:使用 safe-area-inset-top 等 ios 安全区域变量 + meta 标签中设置 viewport-fit=cover https://github.com/pengkobe/r ...
- 30 个 Java 集合面试问题及答案
30 个 Java 集合面试问题及答案 Java集合框架为Java编程语言的基础,也是Java面试中很重要的一个知识点.这里,我列出了一些关于Java集合的重要问题和答案. 1.Java集合框架是什么 ...
- 利用Python将文件进行分类整理
利用Python将文件进行分类整理 功能 根据一个文件夹中的文件类型建立相应的文件夹,将同一种类型的文件放在一个文件夹中. 实现思路 主要用到 os 和 shutil 两个库,os 用来获取文件夹中的 ...
- JAVA通过网站域名URL获取该网站的源码(2018
import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.net.HttpURLConnect ...
- HDU 6356 (线段树-l,r 之间小于val 的变val+单点求值)
题目描述: 给你一个长度为n的最开始为0的数以及m个更新操作以及数据生成器参数X,Y,Z.每次操作,将由数据生成器生成出li,ri,vi.让你从区间[li,ri]中,将所有小于vi的数变为vi.最后让 ...