سلام دوستان
امروز میخواهیم یک مبحث پر کاربرد در جاوا را توضیح دهیم Timer در برنامه نویسی کاربرد های بسیاری دارد از کاربرد در یک سیستم اندازه گیری زمان گرفته تا بروز رسانی زمان و تاریخ در یک برنامه تجاری.
کار با Timer در JSwing جاوا بنظر عجیب می آید چون مثل C# یا Visual Basic یک کنترل خاص به Timer اختصاص داده نشده است ( حداقل در Netbeans چنین کنترلی وجود ندارد)


خب ما فقط یک برنامه نمونه ساده برای نشان دادن چگونگی کار Timer در جاوا ارائه میدهیم
این برنامه هر یک ثانیه یکبار یک عدد به  متغیر  time اضافه کرده و مقدار آنرا در لیبل lblTimer نمایش می دهد وقتی که این مقدار به 60 رسید یعنی 1 دقیقه بعد Timer را متوقف کرده و عبارت Hello World! را در lblTimer نمایش میدهد
خب یک JFrame به نام jfrmTimer ایجاد میکنیم.
برای استفاده از Timer این فراخانی ها باید صورت بگیرد.

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;
خب ما به یک ActionListener برای ساختن Timer احتیاج داریم یک کلاس درونی که این Interface را پیاده سازی میکند مینویسیم.
کلاس درونی به کلاس هایی گفته میشود که درون یک کلاس دیگر هستند نه به این معنی که یک شی از آنها درون کلاس اصلی وجود دارد یعنی به کل درون کلاس اصلی تعریف میشوند.
    class TimerListener implements ActionListener{
        int time = 0;

        public void actionPerformed(ActionEvent evt){
            time++;
            lblTimer.setText(String.valueOf(time));
            if(time == 60){
                timer.stop();
                lblTimer.setText("Hello World!");
            }
        }
    }

خب حالا میتوانیم یک شی از کلاس Timer بسازیم.
ابتدا در کلاس jfrmTimer یک متغییر از نوع Timer  میسازیم .
private Timer timer;

سپس سازنده یا Constructor کلاس jfrmTimer را بروز میکنیم.
    public jfrmTimer() {
        initComponents();
        timer = new Timer(1000, new TimerListener());
        timer.setInitialDelay(0);
        timer.start(); 
        setVisible(true);
    }

آن مقداری که تو Constructor کلاس Timer براش می فرستیم در زمان تکرار بر حسب میلی ثانیه است که اینجا مقدار 1000 در نظر گرفته ایم.
InitialDelay هم زمان ایستادن تا شروع Timer برحسب میلی ثانیه هست که مقدار 0 را به آن اختصاص داده ایم.
اگر مشکلی هم در پیاده سازی داشتید میتوانید کد را از لینک زیر دانلود کنید.
Download Source (21 KB)