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

IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası (https://www.ircforumlari.net/)
-   JavaScript (https://www.ircforumlari.net/javascript/)
-   -   Java : Swing Timer Kullanma (https://www.ircforumlari.net/javascript/485517-java-swing-timer-kullanma.html)

YazılımMimarı 29 Mayıs 2012 13:19

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- Kodu:

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...]


Tüm Zamanlar GMT +3 Olarak Ayarlanmış. Şuanki Zaman: 06:11.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2025, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
Copyright ©2004 - 2025 IRCForumlari.Net Sparhawk