From 690d40cdb9d280f21569bf1f52e25955d9669657 Mon Sep 17 00:00:00 2001 From: nxist2202005086 <304907878@qq.com> Date: Wed, 26 Jun 2024 09:42:38 +0800 Subject: [PATCH] Add timeyzm --- timeyzm | 146 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 timeyzm diff --git a/timeyzm b/timeyzm new file mode 100644 index 0000000..9573c07 --- /dev/null +++ b/timeyzm @@ -0,0 +1,146 @@ +package wuziqiyem; + +import javax.swing.*; +import java.awt.HeadlessException; +import java.awt.BorderLayout; +import java.awt.FlowLayout; +import java.awt.Font; +import java.awt.event.ActionListener; +import java.awt.event.ActionEvent; + +/** + * 计时器 + */ +public class timeyzm extends JPanel { + private static final long serialVersionUID = 1L; + + private static final String INITIAL_LABEL_TEXT = "00:00"; + + // 计数线程 + private CountingThread thread = new CountingThread(); + + // 记录程序开始时间 + private long programStartyzm = System.currentTimeMillis(); + + // 程序一开始就是暂停的 + private long pauseStartyzm = programStartyzm; + + // 程序暂停的总时间 + private long pauseCountyzm = 0; + + private JLabel label = new JLabel(INITIAL_LABEL_TEXT); + + private JButton startyzm = new JButton("开始"); + + private JButton resetyzm = new JButton("清零"); + + private JButton stopyzm = new JButton("暂停"); + + private ActionListener startyzmListener = new ActionListener() { + public void actionPerformed(ActionEvent e) { + thread.stopped = false; + programStartyzm = System.currentTimeMillis(); + pauseStartyzm = programStartyzm; + pauseCountyzm = 0; + startyzm.setText("开始"); + }}; + + private ActionListener stopyzmListener = new ActionListener() { + public void actionPerformed(ActionEvent e) { + if (thread.stopped) { + pauseCountyzm += (System.currentTimeMillis() - pauseStartyzm); + thread.stopped = false; + stopyzm.setText("暂停"); + } else { + pauseStartyzm = System.currentTimeMillis(); + thread.stopped = true; + stopyzm.setText("继续"); + } + }}; + + private ActionListener resetyzmListener = new ActionListener() { + public void actionPerformed(ActionEvent e) { + thread.stopped = true; + pauseStartyzm = programStartyzm; + pauseCountyzm = 0; + label.setText(INITIAL_LABEL_TEXT); + resetyzm.setText("清零"); + } + }; + + public timeyzm(String title) { + super(); + setLayout(new BorderLayout()); + + setupBorder(); + setupLabel(); + setupButtonsPanel(); + + startyzm.addActionListener(startyzmListener); + stopyzm.addActionListener(stopyzmListener); + resetyzm.addActionListener(resetyzmListener); + thread.start(); // 计数线程一直就运行着 + } + + // 为窗体面板添加边框 + private void setupBorder() { + setBorder(BorderFactory.createEmptyBorder(250,50,250,50)); + } + + // 配置按钮 + private void setupButtonsPanel() { + JPanel buttonpanelyzm= new JPanel(new FlowLayout()); + buttonpanelyzm.add(startyzm); + buttonpanelyzm.add(stopyzm); + buttonpanelyzm.add(resetyzm); + add(buttonpanelyzm, BorderLayout.SOUTH); + } + + // 配置标签 + private void setupLabel() { + label.setHorizontalAlignment(SwingConstants.CENTER); + label.setFont(new Font(label.getFont().getName(), label.getFont().getStyle(), 40)); + this.add(label, BorderLayout.CENTER); + } + + private class CountingThread extends Thread { + + public boolean stopped = true; + + private CountingThread() { + setDaemon(true); + } + + @Override + public void run() { + while (true) { + if (!stopped) { + long elapsed = System.currentTimeMillis() - programStartyzm - pauseCountyzm; + label.setText(format(elapsed)); + } + try { + sleep(1); // 1毫秒更新一次显示 + } catch (InterruptedException e) { + e.printStackTrace(); + System.exit(1); + } + } + } + + // 将毫秒数格式化 + private String format(long elapsed) { + int minute, second; + elapsed = elapsed / 1000; + + second = (int) (elapsed % 60); + elapsed = elapsed / 60; + + minute = (int) (elapsed % 60); + + return String.format("%02d:%02d", minute, second); + } + } + + +} +