中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java實現的計時器【秒表】功能示例

發布時間:2020-08-31 04:44:58 來源:腳本之家 閱讀:917 作者:不能吃的堅果 欄目:編程語言

本文實例講述了Java實現的計時器【秒表】功能。分享給大家供大家參考,具體如下:

應用名稱:Java計時器

用到的知識:Java GUI編程

開發環境:win8+eclipse+jdk1.8

功能說明:計時功能,精確到1毫秒,可暫停。

效果圖:

Java實現的計時器【秒表】功能示例

源代碼:

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 Timer extends JFrame {
  /**
 *
 */
 private static final long serialVersionUID = 1L;
 private static final String INITIAL_LABEL_TEXT = "00:00:00 000";
  // 計數線程
  private CountingThread thread = new CountingThread();
  // 記錄程序開始時間
  private long programStart = System.currentTimeMillis();
  // 程序一開始就是暫停的
  private long pauseStart = programStart;
  // 程序暫停的總時間
  private long pauseCount = 0;
  private JLabel label = new JLabel(INITIAL_LABEL_TEXT);
  private JButton startPauseButton = new JButton("開始");
  private JButton resetButton = new JButton("清零");
  private ActionListener startPauseButtonListener = new ActionListener() {
    public void actionPerformed(ActionEvent e) {
      if (thread.stopped) {
        pauseCount += (System.currentTimeMillis() - pauseStart);
        thread.stopped = false;
        startPauseButton.setText("暫停");
      } else {
        pauseStart = System.currentTimeMillis();
        thread.stopped = true;
        startPauseButton.setText("繼續");
      }
    }
  };
  private ActionListener resetButtonListener = new ActionListener() {
    public void actionPerformed(ActionEvent e) {
      pauseStart = programStart;
      pauseCount = 0;
      thread.stopped = true;
      label.setText(INITIAL_LABEL_TEXT);
      startPauseButton.setText("開始");
    }
  };
  public Timer(String title) throws HeadlessException {
    super(title);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setLocation(300, 300);
    setResizable(false);
    setupBorder();
    setupLabel();
    setupButtonsPanel();
    startPauseButton.addActionListener(startPauseButtonListener);
    resetButton.addActionListener(resetButtonListener);
    thread.start(); // 計數線程一直就運行著
  }
  // 為窗體面板添加邊框
  private void setupBorder() {
    JPanel contentPane = new JPanel(new BorderLayout());
    contentPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
    this.setContentPane(contentPane);
  }
  // 配置按鈕
  private void setupButtonsPanel() {
    JPanel panel = new JPanel(new FlowLayout());
    panel.add(startPauseButton);
    panel.add(resetButton);
    add(panel, 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);
  }
  // 程序入口
  public static void main(String[] args) {
    try {
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (Exception e) {
      e.printStackTrace();
    }
    Timer frame = new Timer("www.jb51.net 計時器");
    frame.pack();
    frame.setVisible(true);
  }
  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() - programStart - pauseCount;
          label.setText(format(elapsed));
        }
        try {
          sleep(1); // 1毫秒更新一次顯示
        } catch (InterruptedException e) {
          e.printStackTrace();
          System.exit(1);
        }
      }
    }
    // 將毫秒數格式化
    private String format(long elapsed) {
      int hour, minute, second, milli;
      milli = (int) (elapsed % 1000);
      elapsed = elapsed / 1000;
      second = (int) (elapsed % 60);
      elapsed = elapsed / 60;
      minute = (int) (elapsed % 60);
      elapsed = elapsed / 60;
      hour = (int) (elapsed % 60);
      return String.format("%02d:%02d:%02d %03d", hour, minute, second, milli);
    }
  }
}

PS:這里再為大家推薦幾款時間及日期相關工具供大家參考使用:

Unix時間戳(timestamp)轉換工具:
http://tools.jb51.net/code/unixtime

在線日期/天數計算器:
http://tools.jb51.net/jisuanqi/date_jisuanqi

在線日期計算器/相差天數計算器:
http://tools.jb51.net/jisuanqi/datecalc

在線日期天數差計算器:
http://tools.jb51.net/jisuanqi/onlinedatejsq

更多關于java相關內容感興趣的讀者可查看本站專題:《java日期與時間操作技巧匯總》、《Java數據結構與算法教程》、《Java操作DOM節點技巧總結》和《Java緩存操作技巧匯總》

希望本文所述對大家java程序設計有所幫助。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南郑县| 南投市| 莎车县| 达孜县| 都安| 即墨市| 嵊泗县| 河东区| 镇平县| 彰化县| 安西县| 体育| 武胜县| 望江县| 雷州市| 措美县| 临潭县| 都江堰市| 江孜县| 德兴市| 金堂县| 孝昌县| 铜陵市| 扬州市| 惠安县| 博野县| 高陵县| 江津市| 灌云县| 尼木县| 南皮县| 儋州市| 密山市| 东兴市| 隆安县| 麦盖提县| 咸阳市| 肃宁县| 婺源县| 武胜县| 皋兰县|