Ana içeriğe atla

Java Grafik Kütüphanesini Kullanarak Kare ve Daire Çizmek

Öncelikle uygulamamizin nasil olacagina bir göz atalim:

"kare ve daire çizimi" basligiyla, 400-500 ebatinda, ekranimizin 300-100 koordinatlarinda açilan; altinda bize lazim olan tuslarin yesil arka plana yerlestirildigi bir pencere.
this.setTitle("kare ve daire çizimi");
this.setSize(400,500);
this.setLocation(300, 100);

Bunlara ilaveten daha bir çok ayar yapabilirdik. Mesela azami pence büyüklügünü-küçüklügünü belirleyebilirdik: this.setMaximumSize(maximumSize);
Veya rengini mavi yapabilirdik: this.setBackground(Color.BLUE);     ve daha birçok sey…

Tuslarimizi su sekilde olusturuyoruz;
Button ciz = new Button("çiz");
Button sil = new Button("sil");
Button buyut = new Button("+");
Button kucult = new Button("-");


Simdi bunlarin hareketlerini (tiklaninca ne yapacaklarini) denetleyecek olan merciye, yani ActionListener’e bildirmemiz lazim. Aksi taktirde, tiklansalar bile uygulamamizin bundan haberi dahi olmayacaktir.
ciz.addActionListener(this);
sil.addActionListener(this);
buyut.addActionListener(this);
kucult.addActionListener(this);


Son olarak bir de içerisinde “kare” ve “daire” seçenekleri olan seçenek (Choice) menüsü ekleyelim:
sekiller = new Choice();
sekiller.add("kare");
sekiller.add("daire");

Bütün bu tuslari ve seçenek menümüzü de bir panele yerlestirirsek arayüzûmüz neredeyse hazir demektir.
Öncelikle bir panel olusturalim. Panelimizin ismi de “tuslar” olsun;
Panel tuslar = new Panel();

Panelimizin rengi de yesil olsun;
tuslar.setBackground(Color.GREEN);

Panelimiz hazir. Simdi komponentlerimizi (tuslar ve seçenek) panelimize ekleyelim:
tuslar.add(ciz);
tuslar.add(sil);
tuslar.add(buyut);
tuslar.add(kucult);
tuslar.add(sekiller);

Tabiî unutmamamiz gereken birsey var; o da, üzerinde komponentlerimizin bulundugu panelimizi asil container’e atmak!
this.add(tuslar,BorderLayout.SOUTH);

“Tuslar” adli panelimizi BorderLayout’un SOUT parametresini kullanarak penceremizin en alt kismina yerlestirdik.

Simdi sira, bütün bu komponentlerin ne ise yarayacagini belirlemeye geldi.
‘ciz’ tusu ile ‘sekiller’ seçenegindeki “kare” ya da “daire”den hangisi seçilmisse onu çizecegiz,
‘sil’ tusu ile ekrandaki sekli silecegiz,
‘buyut’ (+) ile seklin buyumesini, ‘kucult’ (-) ile de kuculmesini saglayacagiz.

Öncelikle JAVA’da herhangi bir sekli çizmemiz için lazim olan yordami çagiralim (daha dogrusu Canvas sinifindan ‘override’ etmeliyiz):
public void paint(Graphics g)
{
    g.setColor(Color.red);

    if (sekiller.getSelectedItem().equals("kare")) g.fillRect(x1, y1, x2, y2);
    if (sekiller.getSelectedItem().equals("daire")) g.fillOval(x1, y1, x2, y2);

}

Verilen emir çok basit;
“eger ‘sekiller’ seçenegindeki item’in etiketi “kare” ise g.fillRect(x1, y1, x2, y2); islemini yap, yani içi dolu bir kare çiz”,
“eger ‘sekiller’ seçenegindeki item’in etiketi “daire” ise g.fillOval(x1, y1, x2, y2); islemini yap, yani içi dolu bir daire çiz.

Bunlar için kullanacagimiz renk ise kirmizi olarak belirlendi:
g.setColor(Color.red);
Int x1, y1, x2, y2;

Tanimlamasini sinifimizin basinda yerçeklestirdik. Çünkü bize kare ve daire çizmek için 4 tane ‘int’ tipinde degisken lazim oldugunu biliyorduk.
(Bunlardan ilk ikisi sekillerimizin baslangiç koordinati, diger ikisi ise eni-boyu için lazim. Üçgen çizmek istesek daha fazla degiskene ihtiyacimiz olacakti)

Çizim yapmak için kullanacagimiz yordamimiz da hazir olduguna göre, tuslarimizi çalistirmanin zamani geldi.
Tuslara verecegimiz emirler çok basit:
“eger ‘ciz’ etiketli tusa basilirsa koordinatlari verilen sekli çiz”
“eger ‘sil’ etiketli tusa basilirsa x2, y2 (en-boy) degiskenlerini sifir yap ki sekil görünmeyecek kadar küçük olsun”
“eger  ‘+’ etiketli tusa basilirsa x2,y2 (en-boy) degerlerini arttir”
“eger ‘-‘ etiketli tusa basilirsa x2,y2 degerlerini azalt”

Simdi sira bunlari makine dilinde yazmaya geldi; fakat buraya dikkat, bu kodlari ActionListener interface’inden implemente edecegimiz actionPerformed yordami içine yazmaliyiz. Varligi ActionListener’e bildirilen bir tusa basildiginda bu yordam devreye girer ve verilen emirleri yerine getirir. Simdi kodlari gorelim:
       
public void actionPerformed(ActionEvent e)
{

    if (e.getActionCommand().equals("çiz"))
    {
        x1 = 50; x2 = 10;
        y1 = 50; y2 = 10;
    }

    if (e.getActionCommand().equals("sil"))
    {
        x2 = 0;
        y2 = 0;
    }

    if (e.getActionCommand().equals("+"))
    {
        x2 += 5;
        y2 += 5;
    }
    else if (e.getActionCommand().equals("-"))
    {
        x2 -= 5;
        y2 -= 5;
    }
    repaint();
}

Not: JAVA’da String karsilastirmalari equals(); metodu ile yapilir!

Tuslarin hareketlerinin kontrolunu ayri ayri, tek te kif bloklarina da yaptirabiliriz, hepsini birlestirip if-else kullanarak da yapabiliriz. Burada görmek için her ikisini de yaptik.

 repaint(); metoduna gelince; o da sekli yeni verilen koordinat ve ebata göre tekrar çiziyor. Bu metodu actionPerformed(ActionEvent e); metodu altinda çagirmasaydik yapilan degisiklikleri göremeyecektik.

Bunu da hâllettikten sonra sira geldi ufak ama olmazsa olmaz bir ayrintiya: Penceremizi nasil kapatacagiz?
Java’da bu da kodlar vasitasi ile oluyor (bu bizim uygulamamiz için geçerli).
Iste lazim olan kod:
this.addWindowListener( new WindowAdapter() {
    public void windowClosing(WindowEvent we) {
        System.exit(0);
        }
    });

En son, bütün çarklarin dödügü metodu yani ‘main’ metodunu da yazip, insa ettigimiz penceremizi çagiriyor ve görünür hâle getirmeyi unutmuyoruz:
public static void main(String arg[]){
    new Cizim().setVisible(true);
}

Sanirim simdi bütün taslar yerine oturdu J

Uygulama kodlarimizin tamami:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Cizim extends Frame implements ActionListener
{
    int x1,x2,y1,y2;
    Choice sekiller;
    public Cizim()
    {
        this.setTitle("kare ve daire çizimi");
        this.setSize(400,500);
        this.setLocation(300, 100);
        this.setBackground(Color.BLUE);
       
        Button ciz = new Button("çiz");
        Button sil = new Button("sil");
        Button buyut = new Button("+");
        Button kucult = new Button("-");
       
        ciz.addActionListener(this);
        sil.addActionListener(this);
        buyut.addActionListener(this);
        kucult.addActionListener(this);
       
        sekiller = new Choice();
        sekiller.add("kare");
        sekiller.add("daire");       
       
        Panel tuslar = new Panel();
        tuslar.setBackground(Color.GREEN);
        tuslar.add(ciz);
        tuslar.add(sil);
        tuslar.add(buyut);
        tuslar.add(kucult);
        tuslar.add(sekiller);
       
        this.add(tuslar,BorderLayout.SOUTH);
       
        this.addWindowListener( new WindowAdapter() {
            public void windowClosing(WindowEvent we) {
                System.exit(0);
                }
            });
       
    }
   
    public void actionPerformed(ActionEvent e) {
   
        if(e.getActionCommand().equals("çiz")){
            x1=50; x2=10;
            y1=50; y2=10;
           
        }
       
        if(e.getActionCommand().equals("sil")){
            x2=0;
            y2=0;
           
        }
       
        if(e.getActionCommand().equals("+")){
            x2+=5;
            y2+=5;
            }
            else if(e.getActionCommand().equals("-")){
                x2-=5;
                y2-=5;
                                   
            }
        repaint();
        }         
   
    @Override
    public void paint(Graphics g){               
        g.setColor(Color.red);
       
        if(sekiller.getSelectedItem().equals("kare")) g.fillRect(x1, y1, x2, y2);
        if(sekiller.getSelectedItem().equals("daire")) g.fillOval(x1, y1, x2, y2);
       
    }
       
    public static void main(String arg[]){
        new Cizim().setVisible(true);
    }   
}

Yorumlar

Bu blogdaki popüler yayınlar

MPLS Temel Konfigürasyonu

Bu yazı içerisinde sizlerle temel “MPLS” protokolü konfigürasyonunu adım adım uygulayarak paylaşacağım. Bu adımların tamamını Huawei marka AR 2200 Serisi Router ürün ailesi üzerinde konfigüre edeceğiz. Bu konfigürasyonların kullanıldığı ve çalıştırıldığı işletim sistemi versiyonu “ V200R003C00 ” dur. Konfigürasyon adımlarının tamamı bi çok üretici ürününde de aynı şekilde ve aynı ön gereksinim ve alt yapı hazır olduğu sürece uygulanabilir ve müşteri ve/veya Servis sağlayıcıda devreye alınabilir. İşlem adımlarının uygulanırken temiz bir şekilde anlaşılması çok önemlidir. MPLS Protokolü temel konfigürasyonunu aşağıdaki topoloji üzerinden uygulayarak sizlere sunuyor olacağım. MPLS Referans Topolojimiz Öncelikli olarak tüm Router cihazlarımızda, fiziksel interface’ler ve Loopback interfac IP adres tanımlamalarını topolojimize uygun ayarlıyoruz. RouterB IP İnterface konfigürasyonu; “Router B IP Konfigürasyonu çıktısı” “Router B Üzerinde Yer Alan İnterface’lerin IP...

Bilgisayarın Sağlıklı ve Doğru Kullanımı

Bilgisayar genelde oturarak kullanıldığı için uzun süreli kullanımlar vücudumuza zarar verebilmektedir.Yazı yazmak,internet erişimi ya da oyun oynamak için uzun süreli kullanım;başta bel,boyun ve omurgalarımızın sağlığını tehdit eder.Diğer yandan sürekli aynı noktaya bakmak göz sağlığımıza zarar verir.Bu nedenle bilgisayar kullanıcısının oturma pozisyonuna çok dikkat etmesi ve uzun süre çalışmaması gerekir. Bilgisayar Kullanırken Oturma Şekli Önerileri ·         Bilgisayarı,uygun yükseliğe sahip olan masa ve sandalye üzerinde dik oturma konumunda kullanmak gerekir.Klavye ve farenin çok uzakta olmaması gerekir.Oturan kişinin gözü ile bilgisayar arasında 50-60 cm uzaklık olmalıdır.Kollar yatay ve rahat konumda olmalıdır.   ·         Masa yüksekliği yaklaşık 70 cm olmalıdır.Dizüstü bilgisayarlar için yükseltici olarak bilinen altlıklar yararlı olabilir.   ·         Oturma sırasında sırt desteklemeli ve...

Web Debugging - Hata Ayiklama (Fiddler Aracinin Kullanimi)

Debugging, hata ayiklama, programcinin olmazsa olmazi diyebiliriz. Kodlama sirasinda çikan hatalarda ya da hatasiz çalisan programda istenen sonuç dönmeyince, nerde hata yaptim diye satirlari incelemeye baslariz. Genelde kodlama sirasinda çikan hatalarimizda derleyici neyi yanlis yaptigimizi söylerken, runtime' da hatalarla karsilasinca ya da islemde bir yanlislik varsa isler biraz zorlasir. Pek çogumuz breakpoint'lerle adim adim inceleme yapariz, eger javascript kodlarimiz varsa alert'ler kullanarak isin içinden çikmaya çalisiriz. Tabi bu durum her zaman ise yaramayabilir, ya da çok can sikici bir hale dönüsebilir. Bu durumlarda browserda aslinda neler oldugunu ögrenmek için http requestlari takip edebilecegimiz programlar var. Fiddler bunlardan birisi. Fiddler Nedir Fiddler, bilgisayar ve internet arasindaki tüm web trafigini takip eden ve detayli bir sekilde analiz yapmamizi saglayan ücretsiz bir http debugging (Hata Ayiklama) programidir. Bu program, http trafigini...