900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Java内嵌秒表_【Java】Java计时器(秒表)(示例代码)

Java内嵌秒表_【Java】Java计时器(秒表)(示例代码)

时间:2018-09-06 19:50:47

相关推荐

Java内嵌秒表_【Java】Java计时器(秒表)(示例代码)

import javax.swing.*;importjava.awt.HeadlessException;importjava.awt.BorderLayout;importjava.awt.FlowLayout;importjava.awt.Font;importjava.awt.event.ActionListener;importjava.awt.event.ActionEvent;/*** 计时器*/

public class Timer extendsJFrame {/****/

private static final long serialVersionUID = 1L;private static final String INITIAL_LABEL_TEXT = "00:00:00 000";//计数线程

private CountingThread thread = newCountingThread();//记录程序开始时间

private long programStart =System.currentTimeMillis();//程序一开始就是暂停的

private long pauseStart =programStart;//程序暂停的总时间

private long pauseCount = 0;private JLabel label = newJLabel(INITIAL_LABEL_TEXT);private JButton startPauseButton = new JButton("开始");private JButton resetButton = new JButton("清零");private ActionListener startPauseButtonListener = newActionListener() {public voidactionPerformed(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 = newActionListener() {public voidactionPerformed(ActionEvent e) {

pauseStart=programStart;

pauseCount= 0;

thread.stopped= true;

label.setText(INITIAL_LABEL_TEXT);

startPauseButton.setText("开始");

}

};public Timer(String title) throwsHeadlessException {super(title);

setDefaultCloseOperation(EXIT_ON_CLOSE);

setLocation(300, 300);

setResizable(false);

setupBorder();

setupLabel();

setupButtonsPanel();

startPauseButton.addActionListener(startPauseButtonListener);

resetButton.addActionListener(resetButtonListener);

thread.start();//计数线程一直就运行着

}//为窗体面板添加边框

private voidsetupBorder() {

JPanel contentPane= new JPanel(newBorderLayout());

contentPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));this.setContentPane(contentPane);

}//配置按钮

private voidsetupButtonsPanel() {

JPanel panel= new JPanel(newFlowLayout());

panel.add(startPauseButton);

panel.add(resetButton);

add(panel, BorderLayout.SOUTH);

}//配置标签

private voidsetupLabel() {

label.setHorizontalAlignment(SwingConstants.CENTER);

label.setFont(new Font(label.getFont().getName(), label.getFont().getStyle(), 40));this.add(label, BorderLayout.CENTER);

}//程序入口

public static voidmain(String[] args) {try{

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

}catch(Exception e) {

e.printStackTrace();

}

Timer frame= new Timer("计时器");

frame.pack();

frame.setVisible(true);

}private class CountingThread extendsThread {public boolean stopped = true;privateCountingThread() {

setDaemon(true);

}

@Overridepublic voidrun() {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(longelapsed) {inthour, 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);

}

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。