java怎么在窗口中添加计时器?java实现计时器功能

Java的功能还是很大的,毕竟是生活中很多地方都跟java相关,就连大家使用的小程序或者玩的游戏都是由java开发完成的,那java怎么在窗口中添加计时器?下面来我们就来给大家讲解一下。

应用名称:Java计时器

用到的知识:Java GUI编程

开发环境:win8+eclipse+jdk1.8

功能说明:计时功能,精确到1毫秒,可暂停。

效果图:

java怎么在窗口中添加计时器?java实现计时器功能.jpg

以下是源代码:

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 = 1 L;
    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("计时器");
        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);
        }
    }
}

java计时器功能就这样就能实现了,实现java计时器功能是在开发工程中经常遇见的,并且也是一个简单的java开发项目,而本篇文章能够给大家带来参考价值,希望能够帮助到大家!最后大家如果想要了解更多java入门知识,敬请关注奇Q工具网。

推荐阅读:

java架构师怎么报名?如何通过Java架构师考试?

java怎么做窗口程序?java做窗口程序实例

java安全框架哪个好?java安全框架总结

推荐内容