SecondCounterRunnable.java
上传用户:songled
上传日期:2022-07-14
资源大小:94k
文件大小:1k
源码类别:

进程与线程

开发平台:

Java

  1. import java.awt.*;
  2. import javax.swing.*;
  3. import java.text.*;
  4. public class SecondCounterRunnable extends JComponent implements Runnable {
  5. private volatile boolean keepRunning;
  6. private Font paintFont;
  7. private volatile String timeMsg;
  8. private volatile int arcLen;
  9. public SecondCounterRunnable() {
  10. paintFont = new Font("SansSerif", Font.BOLD, 14);
  11. timeMsg = "never started";
  12. arcLen = 0;
  13. }
  14. public void run() {
  15. runClock();
  16. }
  17. public void runClock() {
  18. DecimalFormat fmt = new DecimalFormat("0.000");
  19. long normalSleepTime = 100;
  20. int counter = 0;
  21. keepRunning = true;
  22. while ( keepRunning ) {
  23. try {
  24. Thread.sleep(normalSleepTime);
  25. } catch ( InterruptedException x ) {
  26. // ignore
  27. }
  28. counter++;
  29. double counterSecs = counter / 10.0;
  30. timeMsg = fmt.format(counterSecs);
  31. arcLen = ( ( ( int ) counterSecs ) % 60 ) * 360 / 60;
  32. repaint();
  33. }
  34. }
  35. public void stopClock() {
  36. keepRunning = false;
  37. }
  38. public void paint(Graphics g) {
  39. g.setColor(Color.black);
  40. g.setFont(paintFont);
  41. g.drawString(timeMsg, 0, 15);
  42. g.fillOval(0, 20, 100, 100);  // black border
  43. g.setColor(Color.white);
  44. g.fillOval(3, 23, 94, 94);  // white for unused portion
  45. g.setColor(Color.blue);  // blue for used portion
  46. g.fillArc(2, 22, 96, 96, 90, -arcLen);
  47. }
  48. }