2 Temmuz 2013 Salı

Java Gui--15 (Timer)



         Timer java da zor öğrendiğim bir sınıf. Aslında kullanımının oldukça basit olduğunu aşağıdaki uygulamaları yapınca anladım. İlk örneğimde bir pencerem var ve belirli zaman aralıklarıyla ekrana yeni pencereler açılıyor. Bunu yaptırabilmek için öncelikle

Timer timer = new Timer( );

         seklinde “Timer” sınıfına ait timer nesnemi oluşturuyorum. Hemen arkasından

TimerTask task = new TimerTask( )

         yazarken derleyicim otomatik tamamlama ile “TimerTask” sınıfının metodu olan “run( )” metodunu Override ediyor. Eğer sizin derleyiciniz otomatik tamamlamıyor ise sizde aşağıdaki gibi “run( )” metodunu Override etmelisiniz:

TimerTask task = new TimerTask( ) {

        @Override
        public void run( ) {
           
        }
    };

         Şimdi yaptırmak istediğimiz işlemleri “run( )” içerisine yazıyoruz. Ben bu örnekte yeni pencere açılıp uyarı vermesini istediğim için “JOptionPane” sınıfı içerisindeki hazır pencerelerle istediğimi kolay bir şekilde yapıyorum. Ancak benim bu açılan pencereleri  belirli bir sayı ile sınırlandırmam lazım. Bu yüzden TimerTask ' in içerisinde bir integer tanımlıyorum. Bundan sonra işim kolaylaştı. “If” ifadeleri ile kolayca yapmak istediğimi yapıyorum.
         Evet sıra geldi timer ' i başlatmaya. Bu işlemi de Constructor da ( public TimerDemo( ) )

timer.schedule(t, 0, 1000);

        şeklinde yazıyorum. Bu şekilde farklı kullanımları var. Ben bunlardan

timer.schedule(TimerTask task, Date firstTime, long);

        olanını kullandım. Burada parantez içerisindeki ilk ifadeye “TimerTask” nesnesini , ikinci ifadeye varsa ilk zamanı , üçüncüye de zaman periyodumuzu yazıyoruz. Sonuç olarak aşağıdaki örneği hazırlamış olduk.

Örnek 1

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class TimerDemo extends JFrame implements ActionListener{
    Timer timer = new Timer( );
    TimerTask t = new TimerTask( ) {
        int zaman = 0;
        @Override
        public void run( ) {
            zaman++;
            if(zaman <= 5){
                JOptionPane.showMessageDialog(null,zaman);
               
            }else{
                JOptionPane.showMessageDialog(null, "Durdu");
                System.exit(0);
            }
           
        }
    };
    public TimerDemo( ){
        timer.schedule(t, 0, 1000);
        setTitle("Timer Demo");
        setLocationRelativeTo(null);
        setSize(300, 300);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public void actionPerformed(ActionEvent event){
       
    }
    public static void main(String[ ] args) {
        TimerDemo demo = new TimerDemo( );
    }
}

Ekran Görüntüleri




Örnek 2

         Bu örnekte bir dairem var ve ben bu dairenin penceremde önce sağa sonra eski konumuna dönmesini timer kullanarak sağlıyorum.(Başlangıçta dairem solda) Başlangıç için ise bir start butonum var. Bu butona basıldığında timer başlıyor. Bunların haricinde 2 değişkenim var ve bu değişkenlerle dairenin konumunu değiştiriyorum. Ancak konum değiştirme işleminden sonra “repaint( )” metodunu kullandığıma dikkat edin. Çünkü programı doğru yazsanız bile bu metot olmadan istediğiniz sonucu vermeyecektir.

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JButton;
import javax.swing.JFrame;


public class TimerDemo2 extends JFrame implements ActionListener{
    int x = 0;
    int y = 200;
    int zaman = 0;
    JButton buton = new JButton("Start");
    Timer timer = new Timer( );
    TimerTask task = new TimerTask( ) {

        @Override
        public void run( ) {
           if(x <= 200){
               x += 5;
               repaint( );
           }
           if(x > 200 && y > 0){
               y -= 5;
               repaint( );
           }
        }
    };
    public TimerDemo2( ){
        setTitle("Timer Demo2");
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setSize(300, 300);
        add(buton, BorderLayout.SOUTH);
        buton.addActionListener(this);
    }
    public void actionPerformed(ActionEvent event){
        timer.schedule(task, 0, 100);
        buton.setEnabled(false);
    }
    public void paint(Graphics g){
        super.paint(g);
        g.setColor(Color.CYAN);
        if(x <= 200){
            g.fillOval(x, 100, 100, 100);
        }
        if(x > 200){
            g.fillOval(y, 100, 100, 100);
        }
       
    }
    public static void main(String[ ] args) {
        TimerDemo2 demo = new TimerDemo2( );
    }
}

Ekran Goruntuleri






0 yorum:

Yorum Gönder