Java带图像化界面的倒计时程序 发表于 2020-02-23 | 分类于 Java | 阅读次数: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102import javax.swing.*;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.concurrent.ScheduledThreadPoolExecutor;import java.util.concurrent.TimeUnit;/** * 倒计时 */public class Counter { private JFrame frame; private JLabel jl0; private ScheduledThreadPoolExecutor scheduled; public static void main(String[] args) { new Counter().timer("2020-02-22 00:00:00"); } /* String -> Date */ private Date String2Date(String dateStr) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { Date date = simpleDateFormat.parse(dateStr); if (date.getTime() <= System.currentTimeMillis()) { jl0.setText("时间不能早于现在" + dateStr); throw new IllegalArgumentException("时间不能早于现在" + dateStr); } return date; } catch (ParseException e) { jl0.setText("时间格式传入错误,如yyyy-MM-dd HH:mm:ss," + dateStr); throw new IllegalArgumentException("时间格式传入错误,如yyyy-MM-dd HH:mm:ss," + dateStr); } } /* 倒计时的主要代码块 */ public void timer(String dateStr) { Date end = String2Date(dateStr); scheduled.scheduleAtFixedRate(new Runnable() { @Override public void run() { long time = (end.getTime() - 1 - System.currentTimeMillis()) / 1000; if (time <= 0) { stopTimer(); jl0.setText("到达指定时间点" + dateStr); return; } long hour = time / 3600; long day=hour / 24; long minute = (time - hour * 3600) / 60; long seconds = time - hour * 3600 - minute * 60; StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("<html>" + "<h1 style=\"text-align:center\">倒计时</h1><br>" + "<h2 style=\"text-align:center\">") .append(day).append("天 ").append(hour- 24*day).append("时 ").append(minute).append("分 ").append(seconds).append("秒 ") .append("</h2></html>"); jl0.setText(stringBuilder.toString()); } }, 0, 1, TimeUnit.SECONDS); } /** * 停止定时器 */ private void stopTimer() { if (scheduled != null) { scheduled.shutdownNow(); scheduled = null; } } /* 构造 实现界面的开发 GUI */ public Counter() { scheduled = new ScheduledThreadPoolExecutor(2); init(); } /* 组件的装配 */ private void init() { frame = new JFrame("XXXXX"); jl0 = new JLabel(); JPanel jp = new JPanel(); jp.add(jl0); frame.add(jp); frame.setVisible(true); frame.setLocation(630, 280); frame.setSize(400, 300); frame.setResizable(false); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } 欢迎您扫一扫上面的微信公众号,订阅我的个人公众号! 坚持技术分享! 打赏 微信支付 支付宝