好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Java实现的计时器【秒表】功能示例

本文实例讲述了java实现的计时器【秒表】功能。分享给大家供大家参考,具体如下:

应用名称:java计时器

用到的知识:java gui编程

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

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

效果图:

源代码:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

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 = "0 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( "HdhCmsTesttuohang.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)转换工具: https://tool.tuohang.net/t/timestamp/

在线秒表计时器: https://tool.tuohang.net/t/miaobiao/

希望本文所述对大家java程序设计有所帮助。

原文链接:https://blog.csdn.net/C_jian/article/details/50506759

查看更多关于Java实现的计时器【秒表】功能示例的详细内容...

  阅读:19次