IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası
  sohbet

 Kayıt ol  Topluluk
1Beğeni(ler)
  • 1 Post By YazılımMimarı

Yeni Konu aç Cevapla
 
LinkBack Seçenekler Stil
Alt 29 Mayıs 2012, 13:19   #1
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Java : Swing Timer Kullanma




javax.swing.Timer Kullanma

Java'nın Swing paketindeki (java.swing) sadece Swing'de kullanılmak için yazılmış bir class'dır. Aslında bir olayın (event'in) işlenmesi sürecine paralel bir biçimde çalışması için yazılmıştır. Zaten event'ler düğmeye basma, fareye tıklama menü maddesi seçme gibi durumlarda EventDispatcher thread denilen bir thread tarafından teker teker değerlendirlmekte va eventi dinleyen nesnelere teker teker çağrılmaktadır. java.swingTimer'ın yaptığı, programcının yapmak istediği bir işinde diğer olaylara benzer bir şekilde değerlendirlmesini ve çalıştırlmasını sağlamaktır. Örnek olarak Swing kulllanarak ekrana dijital saat çizen bir program yapalım :

PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
package com.kp;
import java.awt.*;
import java.util.*;
public class 
ClockCanvas extends Canvas{
  private final static 
int SLICE_DEGREE=6;
  private 
Point center=new Point(100,100);
  private 
int radius=80;
  public 
ClockCanvas(){
    
Timer timer=new Timer();
    
TimerTask task=new TimerTask(){
  public 
void run() {
      
repaint();
  }
    };
    
timer.scheduleAtFixedRate(task,0,1000);
  }
  public 
void paint(Graphics g){
      
Calendar now=Calendar.getInstance();
      
drawDial(g);
      
drawSecondHand(g,now);
      
drawMinuteHand(g,now);
      
drawHourHand(g,now);
  }
  private 
void drawDial(Graphics g) {
    
g.drawOval(center.x-radius,center.y-radius,2*radius,2*radius);
    
int numbersRadius=radius-8;
    for(
int i=1;i<=12;i++){
  
double hour=Math.PI/6;
  
int x=(int)(center.x-5+(numbersRadius)*Math.sin(i*hour));
  
int y=(int)(center.x+5-(numbersRadius)*Math.cos(i*hour));           
  
g.drawString(Integer.toString(i),x,y);
    }
  }
  private 
void drawSecondHand(Graphics g,Calendar now) {
    
int second now.get(Calendar.SECOND);  
    
double radian=Math.toRadians(SLICE_DEGREE*second);
    
int x=(int)(center.x+(radius-5)*Math.sin(radian));
    
int y=(int)(center.y-(radius-5)*Math.cos(radian));
    
g.drawLine(center.x,center.y,x,y);
  }
  private 
void drawMinuteHand(Graphics g,Calendar now) {
    
int minute=now.get(Calendar.MINUTE);
    
double radian=Math.toRadians(SLICE_DEGREE*minute);  
    
int x=(int)(center.x+(radius-10)*Math.sin(radian));
    
int y=(int)(center.y-(radius-10)*Math.cos(radian));  
    
g.drawLine(center.x,center.y,x,y);
  }
  private 
void drawHourHand(Graphics g,Calendar now) {
    
int hour now.get(Calendar.HOUR);      
    
int minute=now.get(Calendar.MINUTE);
    
double radian=Math.toRadians(30*hour+minute/2);    
    
int x=(int)(center.x+(radius-25)*Math.sin(radian));
    
int y=(int)(center.y-(radius-25)*Math.cos(radian));
    
g.drawLine(center.x,center.y,x,y);
  }
  public static 
void main(String[] args) {
    
Frame frame=new Frame();
    
frame.setLayout(new BorderLayout());
    
frame.add(BorderLayout.CENTER,new ClockCanvas());
    
frame.setBounds(0,0,220,220);
    
frame.setVisible(true);
  }


Burada 1000 milisaniye arayla verilen ActionListener'ın çağrılması sağlanmaktadır. Ve actionPerformed method'unda zaman alınmakta ve repaint çağrılmaktadır. Burada repaint() method'u da paint method'unu dolaylı olarak çağıracağından gerekli çizimler yapılmış olacaktır. Örnekte belli bir biçimde zamanı basmak için java.text.DecimalFormat class'ı kullanılmış.

[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]


Konu YazılımMimarı tarafından (17 Şubat 2013 Saat 19:54 ) değiştirilmiştir.
 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları sohbet odaları Benimmekan Mobil Sohbet
Cevapla


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Kapalı
Pingbacks are Açık
Refbacks are Açık


Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
Java Swing/AWT | FX Fonzerelli Java 3 21 Temmuz 2012 19:16
JRE (Java Runtime Engine - Java Çalışma Zamanı Motoru) toXic Java 2 18 Aralık 2011 13:40
Sorun söyleyeyim (Java,JSP,ASP.NET(C#),PL/SQL,jQuery,Java Script,Ajax) J2EE123 Java 2 03 Kasım 2011 12:57
JRE (Java Runtime Engine - Java Çalışma Zamanı Motoru) Stealth Java 1 29 Eylül 2010 22:19
Java Swing Sunay Java 0 24 Nisan 2010 01:41