iLEDについて

Javaサンプル

Netbeans

Libre Office Basicマクロ

その他


Author of This Site:
M. Kom. (kom9kmail@gmail.com)
Spam対策のため@マークは全角になっていますから、メール送信時には半角にしてください。

Java ソースコード StopWatch.java

タイマー割り込みのサンプルです。java26.phpの時計機能にストップウォッチ機能を付加したもので、 複数のタイマーを使用する場合のサンプルコードです。
時計表示のために1秒毎のタイマーを一つ動作させ、さらにストップウォッチのために 0.01秒毎のタイマーを、起動させるようになっています。
どちらのタイマーがトリガーされても、actionPerformed(ActionEvent e)メソッドが呼び出されますが、e.getActionCommand()により、どちらのタイマーによるトリガーかを判定して 処理を分岐させています。

使用しているコンポーネント名は、
javax.swing.JButton jButtonStart ストップウォッチのSTARTボタン
javax.swing.JButton jButtonStop ストップウォッチのSTOPボタン
javax.swing.JComboBox jComboArea 地域選択用
javax.swing.JLabel jLabel1
javax.swing.JLabel jLabel2
javax.swing.JLabel jLabel3
javax.swing.JLabel jLabel4
javax.swing.JTextField jTextDate 日付曜日表示
javax.swing.JTextField jTextField1 時計機能の時間表示
javax.swing.JTextField jTextMsec ストップウォッチ機能の秒表示
時計機能のためのタイマーとストップウォッチ機能のためのタイマーの二つの割込みの識別をしています。 例によって、NetBeansで作成したソースファイルの自動生成部分以外の部分のみを掲載します。


import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.Calendar;
import java.util.TimeZone;
/**
 *
 * @author Kom.
 */
public class StopWatch extends javax.swing.JFrame  implements ActionListener{
  javax.swing.Timer timer1, timer2;
  String areaCode="Japan"; //初期エリアコード
  long start;
  /**
   * Creates new form StopWatch
   */
  public StopWatch() {
    initComponents();
        jComboArea.setModel(new javax.swing.DefaultComboBoxModel(new String[] {
               "Japan", "Pacific/Samoa", "Pacific/Honolulu" }));      
    timer1 = new javax.swing.Timer(1000 , this); //1秒ごとにタイマー起動
                //ActionListenerは自分自身(this)のactionPerformedに設定
    timer1.setActionCommand("timer1");//actionPerformed内での識別用文字列
    timer2 = new javax.swing.Timer(10 , this); //0.01秒ごとにタイマー起動
    timer2.setActionCommand("timer2");//actionPerformed内での識別用文字列

    timer1.start();//時計タイマーは直ちにスタート
                
    //NetBeansデザイン画面のjComboAreaのプロパティでエリアコードを
    //入力しない場合は、以下のようなプログラムコードで設定する。
    // jComboArea.setModel(new javax.swing.DefaultComboBoxModel(new String[] {
    //     "Japan", "Pacific/Samoa", "Pacific/Honolulu" }));    
  }

  public void actionPerformed(ActionEvent e){ 
    //Timerがトリガーされるとここが呼び出される
    String[] strDWeek={"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
    Calendar cal = Calendar.getInstance(TimeZone.getTimeZone(areaCode));
    String strAmpm;
    int Year=cal.get(Calendar.YEAR);
    int Month=cal.get(Calendar.MONTH);
    int Day=cal.get(Calendar.DAY_OF_MONTH);
    int DWeek=cal.get(Calendar.DAY_OF_WEEK); //曜日
    int apm=cal.get(Calendar.AM_PM);
    int Hour = cal.get(Calendar.HOUR);
    int Minute = cal.get(Calendar.MINUTE);
    int Second = cal.get(Calendar.SECOND);

    String cmd = e.getActionCommand();//timer1とtimer2の識別用文字列
    if(cmd.equals("timer1")){
      String str1 = String.valueOf(Hour);
      String str2 = String.valueOf(Minute);
      String str3 = String.valueOf(Second);
      if (Hour < 10) { str1 = '0' + str1; }
      if (Minute < 10) { str2 = '0' + str2; }
      if (Second < 10) { str3 = '0' + str3; }
      if(apm==0){
        strAmpm="AM";
      }else{
        strAmpm="PM";
      }
      jTextField1.setText(strAmpm + " " + str1 + ":"+ str2+":" + str3 );
      jTextDate.setText(Year+ "/"+ (Month+1) + "/"+ Day + 
          " ("+strDWeek[DWeek-1] + ")" );
      
    }else if(cmd.equals("timer2")){
    //timer2(0.01秒毎の割り込み)に対する処理
          long now = System.currentTimeMillis();
      jTextMsec.setText(String.format("%.2f", (now - start) / 1000.0)); 
    }
  }

  private void jComboAreaActionPerformed(java.awt.event.ActionEvent evt) {
    // Area設定コンボボックスがクリック
    areaCode=(String)jComboArea.getItemAt(jComboArea.getSelectedIndex());
  } 

  private void jButtonStartActionPerformed(java.awt.event.ActionEvent evt) {
    //Start Button
        start = System.currentTimeMillis();
    timer2.start();
  }

  private void jButtonStopActionPerformed(java.awt.event.ActionEvent evt) {
    timer2.stop();
  }
}

動作画面例

fig

Timer in Java Sample

Kom., 2013