İçindekilerGirişİndex
YukarıİlkÖncekiSonraki YokSon
Geriİleri
Yazdır

Grafik Çizimi

Graphics Class'ı

Ekranın belli bir yerine şekil, yazı veya image koymak için Graphics class'ı kullanılır. Bu class Component'teki

	public void paint(Graphics g);

şeklindeki methodundan elde edilirerek kullanılabilir. Java değişik işletim sistemlerinde ve aynı işletim sisteminin değişik versiyonlarında çalışabildiğinden, Graphics class'ı da abstract'tır. paint() method'undan aslında her işletim sistemi için ayrı olarak yazılmış Graphics class'ının bir subclass'ı elde edilir. Ancak programcıyı bu hiç ilgilendirmez, çünkü bütün subclass'lar Graphics class'ındaki bütün methodları imlement etmişlerdir. Bazı dillerde 'device context' diye de adlandırılan, belli bir dikdörtgende çizim yapılmasını sağlayan class Graphics'dir. Bu dikdörtgen ekranda mutlak bir yeri değil, göreli bir bölümü temsil etmektedir. Bir pencere içerisine çizim yapıldığında, pencerenin ekranın neresinde olduğu bilinmez. Nokta olarak x=100 ve y=200 verildiğinde ekranda pencerenin başlangıç konumundan 100'e 200 uzaklıkta bir nokta kasdedilmektedir. Sadece pencere için değil, bütün component'lerin paint() method'larında elde edilen Graphics nesneleri o component'e ait alana göre bir koordinat sistemine sahiptir. P(0,0) noktası o component'in başlangış noktasıdır, ekranın ilk noktası değil. Zaten bir component'in kendi dışındaki bir alana çizmesi mümkün değildir. Koordinatları alanından fazla verme veya negatif değerler verme gibi durumlarda çizimin sadece component içerisinde kalan kısmı yapılır, dışındaki kısımsa clip edilir (kırpılır).

Graphics Class'ındaki Çizim Method'ları

Graphics class'ı çizim yapmak içine çeşitli methodlar içermektedir. En çok kullanılanları şunlardır.

drawLine()
drawRect()
drawArc()
drawImage()

Bazı drawXxx() methodarının fillXxx() karşılıkları vardır. drawXxx()'ler boş bir şekil çizerken fillXxx() methodları içi dolu bir şekil çizer.

Color (Renk) Belirleme

Çizim rengi, bir şekli çizmeden önce setColor() methoduyla belirlenir. Background rengini belirlemek için de setBackground() methodu bulunmakdar. Bu iki method da parametre olarak Color adlı class'ın instance'larını alırlar. Color, ARGB (Alpha, Red, Gree, Blue) sistemiyle çalışır. Alpha değeri çizimin opaque veya transparent olmasını belirleyen sayıdır. 0 transparent, OxFF da opaque demektir. Her renk RGB bileşenlerinin kombinasyonuyla üretilir. Örneğin yellow (sarı), red (kırmızı) ve green (yeşil) bileşenlerinin tam, blue bileşeninin sıfır olması durumda üretilir.

Color class'ının contructor'larının ve ARGB sisteminin karmaşıklığı nedeniyle, çok kullanılan renkler bu class içerinde sabit (final static) olarak verilmiştir. İstenirse

	g.setColor(new Color(OxFF,0xFF,0x00));

yerine

	g.setColor(Color.yellow);

kullanılabilir.

Yazı 'Çizmek'

Graphics class'ındaki drawString() methodu ekrana bir yazı 'çizmek' için kullanılır. Adından da anlaşıdığı gibi yazı herhangi bir şekil gibi 'çizilir'.

Bir yazının font'unu belirlemek için setFont() methodu kullanılır. Bu methodun kabul ettiği parametre tipi Font class'ıdır ve bu class isim, style ve size değerlerini tutar. Style düz, italik veya bold olmasını belirler. Belirtilen isimde bir font yoksa default font kullanılır.

Graphics Kullanım Örneği

Graphics class'ına örnek olarak üzerine bir caminin krokisini çizen bir Canvas yapalım. Örnekte bütün çizimleri paint() methodunun içerisine yapılmayıp, her bölüm ayrı bir method'da yapılmıştır. Her method'da renkler yeniden belirlenmiştir. Aksi takdirde çizim bir önceki method'da belirlenen renge göre yapılırdı. En üste duracak çizim (örneğin yazı) en son çizilmiştir. Yoksa daha sonra çizilen bir şeklin altında kalabilirdir. drawArc method'u çizeceği yay ilişkin açıyı derece cinsinden alır. Math class'ındaki trigonometric methodlarsa açıyı radyan (pi) cinsinden alırlar.

Göster Gizle Kopar Satır Gizle Satır Göster
  1 import java.awt.*;
  2 public class GraphicsSample
  3   extends Canvas
  4 {
  5   public void paint(Graphics g){
  6     paintGround(g,0,0,400,300);
  7     paintGate(g,360,100,20,100);
  8     paintDome(g,50,70,77);
  9     paintStairs(g,220,150,100,5);
 10     paintMinaret(g,30,30,30,30);
 11     paintMinaret(g,30,240,30,30);
 12     paintCourt(g,220,30,150,240);
 13     paintLabel(g,"A Mosque Plan",100,270);    
 14   }
 15   private void paintLabel(Graphics g,String string,int x,int y){
 16     g.setColor(Color.darkGray);
 17     Font font=new Font("Arial",Font.ITALIC|Font.BOLD,12);
 18     g.setFont(font);
 19     g.drawString(string,x,y);
 20   }
 21   private void paintGround(Graphics g,int x,int y,int width,int height){
 22     g.setColor(Color.lightGray);
 23     g.fill3DRect(x+10,y+10,width-20,height-20,true);
 24     g.setColor(Color.blue);
 25     g.drawRect(x+20,y+20,width-40,height-40);
 26   }
 27   private void paintGate(Graphics g,int x,int y,int width,int height){
 28     g.setColor(Color.blue);
 29     g.drawRect(x,y,width,height);
 30   }
 31   private void paintDome(Graphics g,int x,int y,int radius){
 32     int xcenter=x+radius;
 33     int ycenter=y+radius;
 34     g.setColor(Color.blue);
 35     g.drawArc(x,y,radius*2,radius*2,0,360);
 36     g.setColor(Color.gray);
 37     g.fillArc(xcenter-3,ycenter-3,6,6,0,360);
 38     for(int angle=0;angle<360;angle+=30){
 39       paintAngle(g,xcenter,ycenter,angle,radius);
 40     }
 41   }
 42   private void paintStairs(Graphics g,int xcenter,int ycenter,int ybase,int length){
 43     for(int number=1;number<10;number++){
 44       paintStair(g,xcenter,ycenter,ybase,length,number);
 45     }
 46   }
 47   private void paintStair(Graphics g,int xcenter,int ycenter,int ybase,
 48     int length,int number)
 49   {
 50     int xstart=xcenter;
 51     int ystart=ycenter-ybase/2-length*number;
 52     int width=2*length*number;
 53     int height=ybase+2*length*number;
 54     g.drawRect(xstart,ystart,width,height);
 55   }
 56   private void paintAngle(Graphics g,int xcenter,int ycenter,int angle,int radius){
 57     double radian=(Math.PI*angle)/180;
 58     int xend=xcenter+(int)(radius*Math.cos(radian)) ;
 59     int yend=ycenter-(int)(radius*Math.sin(radian)) ;
 60     g.drawLine(xcenter,ycenter,xend,yend);
 61   }
 62   private void paintMinaret(Graphics g,int x,int y,int width,int height){
 63     g.setColor(Color.magenta);
 64     g.draw3DRect(x,y,width,height,true);
 65     g.setColor(Color.black);
 66     g.drawArc(x+3,y+3,width-6,height-6,0,360);
 67     g.setColor(Color.gray);
 68     g.fillArc(x+width/2-2,y+height/2-2,4,4,0,360);
 69   }
 70   private void paintCourt(Graphics g,int x,int y,int width,int height){
 71     g.setColor(Color.gray);
 72     g.drawRect(x,y,width,height);
 73   }
 74   public static void main(String[] args){
 75     Frame frame=new Frame();
 76     frame.setBounds(100,100,410,330);
 77     frame.setLayout(new BorderLayout());
 78     GraphicsSample sample=new GraphicsSample();
 79     frame.add(sample,BorderLayout.CENTER);
 80     frame.setVisible(true);
 81   }
 82 }

Dosya Listesi

İçindekilerGirişİndex
YukarıİlkÖncekiSonraki YokSon
Geriİleri
Yazdır