AWT kütüphanesi kullanılarak yapılan Java’da analog bir saat örneği anlatılıyor

Java’da Analog Saat Örneği

Bu yazıda Java’da akrep ve yelkovanı olan analog bir saat örneği anlatılıyor. Bir zamanlayıcı (Thread) sayesinde görüntü her saniye (1000 milisaniyede bir) değiştiriliyor. Önrekte Graphics ve Math sınıflarına ait baız yöntemler kullanılıyor. Zamanı almak için Calendar nesnesinden yararlanıyor.

Zamanlayıcı (Timer)

Bir zamanlayıcı (Timer) nesnesine zamanlayıcı görevi (TimerTask) sadece tuvali (canvas‘ı) tekrar çizecek şekilde veriliyor.

  Timer timer=new Timer();
TimerTask task=new TimerTask(){
public void run() {
repaint();
}
};
timer.scheduleAtFixedRate(task,0,1000);

Burada zamanlayıcının scheduleAtFixedRate() yöntemi işlemin 1000 milisaniye arayla yapılmasını sağlıyor.

Takvim (Calendar)

Java’da zamanı (saati ve tarihi) almak için Calendar komutu kullanılır. Şu andaki zamanı almak için

Calendar now=Calendar.getInstance();

şeklinde bir kod yazılır. Calendar sınıfı programın koştuğu yerelliğe göre çalışır. Batı takvimi Gregorian takvimi olduğu için aslında bu yöntemle gelen örnek bu takvimi kullanan ülkeler için GregorianCalendar’dır. Calendar sınıfında get() yöntemi ile zamana ait yıl, ay, gün, saat, dakika ve saniye gibi bilgiler alınır. Örneğin dakikayı almak için

    int minute=now.get(Calendar.MINUTE);

şeklinde bir kod yazılır.

 Math Sınıfı

Java’da temel matematiksel işlemleri yapmak için Math sınıfı bulunur. Burada, bu sınıfa ait sin()cos() gibi trigonometrik fonksiyonlara ilişkin yöntemler kullanılmıştır. Ayrıca derece cinsinden verilmiş bir açıyı radyan birimine çevirmek için toRadians() yöntemi kullılmaktadır.

Graphics Sınıfı

AWT’de çizim yapmak için Graphics sınııfı (veya onu genişletende Graphics2D) sınıfı kullanılır. Burada yuvarlak çizmek için drawOval(), çizgi çizmek için drawLine() ve yazı ‘çizmek’ içinde drawString() yöntemleri kullanılmıştır.

Önreğin tamamı :

package com.godoro.samples.awt;

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();
	}
    };4
    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.setTitle("Clock Canvas");    
    frame.setLayout(new BorderLayout());
    frame.add(BorderLayout.CENTER,new ClockCanvas());
    frame.setBounds(0,0,220,220);
    frame.setVisible(true);
  }
}

 

Kaynak www.godoro.com/Portal/Content/Article/ArticleViewPage.aspx

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir