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( ){
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