なんの飾りもねえ…。
言い訳はしません。単にswingのタイマーとプログレスバーで遊びたかっただけです XD
『ダウンロードはこちら』 なんの飾りもねえですが一応。NetBeansのプロジェクトディレクトリに展開すれば使えます。
Javaのタイマーってめんどくさいイメージがあるんですが、swingなら簡単だよって話です。
まず、処理本体です。複数のよそのサイトを参考にしました。プログレスバーはNetBeansのデフォルトウインドウについてる奴ですが、ついてるなら使ってやれと XD
内容は「カレンダーを取得、前回保存分と違っていたらプログレスバーとテキストを更新する」です。初回は何も保存されていないので、デフォで働くでしょう。
private Calendar cal2; class MyAction implements ActionListener { public void actionPerformed(ActionEvent ev){ Calendar cal1 = getCalendar(); if(!cal1.equals(cal2)){ progressBar.setValue((cal1.get(Calendar.SECOND)*100)/60); textfield1.setText(timeNow(cal1)); cal2 = cal1; } } }
カレンダー処理はこちら。まずカレンダーオブジェクトを引きだす。
ちなみに、たったこれだけを独立させているのは私の趣味です。割り込みごとのカレンダー作成を一回きりにしたかっただけ。(何も考えず作ると、プログレスバー用にもう一回作る事になるので。でも秒データだけ取り出すとかも趣味的に美しくないし…)
private Calendar getCalendar(){ Calendar cal1 = Calendar.getInstance(); // カレンダーオブジェクト生成 return(cal1); }
受け取ったカレンダーから時刻情報をテキストで返す。よそのサイトからもらったサンプルコピーに、ヒトケタ時のゼロ処理を追加したものです。
private String timeNow(Calendar cal1){ DecimalFormat nf = new DecimalFormat("00"); String r = ""; int year = cal1.get(Calendar.YEAR); //(2)現在の年を取得 int month = cal1.get(Calendar.MONTH) + 1; //(3)現在の月を取得 int day = cal1.get(Calendar.DATE); //(4)現在の日を取得 int hour = cal1.get(Calendar.HOUR_OF_DAY); //(5)現在の時を取得 int minute = cal1.get(Calendar.MINUTE); //(6)現在の分を取得 int second = cal1.get(Calendar.SECOND); //(7)現在の秒を取得 StringBuffer dow = new StringBuffer(); switch (cal1.get(Calendar.DAY_OF_WEEK)) { //(8)現在の曜日を取得 case Calendar.SUNDAY: dow.append("日曜日"); break; case Calendar.MONDAY: dow.append("月曜日"); break; case Calendar.TUESDAY: dow.append("火曜日"); break; case Calendar.WEDNESDAY: dow.append("水曜日"); break; case Calendar.THURSDAY: dow.append("木曜日"); break; case Calendar.FRIDAY: dow.append("金曜日"); break; case Calendar.SATURDAY: dow.append("土曜日"); break; } //(9)現在の年、月、日、曜日、時、分、秒を表示 r = year + "/" + nf.format(month) + "/" + nf.format(day) + " " + dow + " " + nf.format(hour) + ":" + nf.format(minute) + ":" + nf.format(second); return(r); }
最後に、ウインドウ生成時にタイマー作って動かします。このinit()を初期化の最後に呼び出せばよいのです。とっても単純なので、書いてるコメントだけで動作のキモは一目瞭然だと思います。
private void init(){ progressBar.setVisible(true); // プログレスバーを見えるようにする。 MyAction maa = new MyAction(); // 処理本体(クラス定義)を実体としてnewする。 new Timer(100,maa).start(); // タイマーを仕掛け100msごとにnewしたやつを呼び出すようにする。 }