OSDN Git Service

[予約ダイアログ]自動予約編集への対応に伴うレイアウト変更(2)
[tainavi/TinyBannavi.git] / TinyBannavi / src / tainavi / TickTimer.java
1 package tainavi;\r
2 \r
3 import java.awt.event.ActionEvent;\r
4 import java.awt.event.ActionListener;\r
5 import java.util.ArrayList;\r
6 import java.util.Date;\r
7 \r
8 import javax.swing.Timer;\r
9 \r
10 /**\r
11  * 毎分00秒に処理をキックするタイマー\r
12  */\r
13 public class TickTimer {\r
14 \r
15         public void setInterval(int min) { timer_interval = min; }\r
16         private int timer_interval = 1;                         // 何分ごとにキックするか\r
17         \r
18         public void setDelay(int n) { timer_delay_add = n; }\r
19         private int timer_delay_add = 100;                      // 実際には毎分00秒ではなく00.1秒にキックするよ\r
20         \r
21         private Timer timer_now = null;                         // タイマーのオブジェクト\r
22         \r
23         private ArrayList<TickTimerListener> listener_list = new ArrayList<TickTimerListener>(); \r
24         \r
25         private final Boolean foo = true;\r
26         \r
27         /**\r
28          * 次の00秒までの時間(ミリ秒)を計算する\r
29          */\r
30         private int getNextDelay() {\r
31                 return timer_interval*60000 - (int) (new Date().getTime() % (long) (timer_interval*60000));\r
32         }\r
33         \r
34         /**\r
35          * タイマー起動\r
36          */\r
37         public int start() {\r
38                 synchronized ( foo ) {\r
39                         if ( timer_now == null ) {\r
40                                 // 新規のタイマー\r
41                                 timer_now = new Timer(0, al_nowtimer);  // TIMER_INTERVALの値はなんでもいい\r
42                                 timer_now.setRepeats(false);                    // 一回しか実行しないよ\r
43                         }\r
44                         \r
45                         int delay = getNextDelay()+timer_delay_add;\r
46                         timer_now.setInitialDelay(delay);\r
47                         \r
48                         timer_now.start();\r
49                         \r
50                         return delay;\r
51                 }\r
52         }\r
53         \r
54         /**\r
55          * タイマー停止\r
56          */\r
57         public boolean stop() {\r
58                 synchronized ( foo ) {\r
59                         if ( timer_now != null ) {\r
60                                 timer_now.stop();\r
61                                 timer_now = null;\r
62                                 \r
63                                 return true;\r
64                         }\r
65                         return false;\r
66                 }\r
67         }\r
68         \r
69         /**\r
70          * タイマー一時停止\r
71          */\r
72         public boolean pause() {\r
73                 synchronized ( foo ) {\r
74                         if ( timer_now != null && timer_now.isRunning() ) {\r
75                                 timer_now.stop();\r
76                                 \r
77                                 return true;\r
78                         }\r
79                         return false;\r
80                 }\r
81         }\r
82         \r
83         /**\r
84          * タイマーで実行する内容を追加\r
85          */\r
86         public void addTickTimerRiseListener(TickTimerListener l) {\r
87                 if ( ! listener_list.contains(l) ) {\r
88                         listener_list.add(l);\r
89                 }\r
90         }\r
91         \r
92         /**\r
93          * タイマーで実行する内容を削除\r
94          */\r
95         public void removeTickTimerRiseListener(TickTimerListener l) {\r
96                 listener_list.remove(l);\r
97         }\r
98         \r
99         /**\r
100          * タイマーで実行する内容\r
101          */\r
102         private final ActionListener al_nowtimer = new ActionListener() {\r
103                 @Override\r
104                 public void actionPerformed(ActionEvent e) {\r
105                         \r
106                         fireTimerRised();\r
107                         \r
108                         int delay = start();    // タイマー再起動\r
109                         //System.out.println("Timer Rised: now="+CommonUtils.getDateTimeYMD(ev.getCalendar())+" delay="+delay);\r
110                 }\r
111         };\r
112         private void fireTimerRised() {\r
113                 TickTimerRiseEvent ev = new TickTimerRiseEvent(this);\r
114                 \r
115                 for ( TickTimerListener l : listener_list ) {\r
116                         l.timerRised(ev);\r
117                 }\r
118         }\r
119 \r
120 }\r