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

Linux En Az Sistem Gereksinimi İsteyen Dağıtımları Değerlendirilmesi

Linux İşletim Sisteminin Dağıtımlarının En az sistem gereksinimi isteyen sürümleri, değerlendirilmesi aşağıdadır, Değerlendirilen dağıtımlar şunlardır: Ubuntu Xubuntu Lubuntu Damn Small Linux Linux Mint Fedora Opensuse Debian Rat Hat Suse Linux Suse Linux Sistem Gereksinimleri: Pentium 1-4 ya da Xeon; AMD Duron, Athlon (XP, MP ya da 64), Sempron ya da Opteron 256MB RAM 500MB boş disk alanı 800x600 yada üstü resolution Rat Hat Memory Gerekli: 4 GB of memory Önerilen: 8 GB of memory CPU Gerekli: Intel Core processor, 2.4GHz, 512K cache or equivalent Önerilen: Intel multi-core processor, 2.4GHz dual processor, 512K cache or equivalent Storage 5 GB alan temel kurulum için. 40 GB alan Channel başına. 10 GB alan Cache dizini için(/var/cache/rhn) Disk yapılandırması olarak Raid 5 tavsiye edilir. Database İlk kurulum için 12 GB alan önerilir. Client ve channel hesaplamaları ise, 250 KB alan client system başına, 500 KB alan çhannel başına, ayrıca 230 KB channel da

( C#) Ders 4 - Diziler, Çok Boyutlu Diziler, Düzenli ve Düzensiz Çok Boyutlu Diziler Nasil Kullanilir. foreach Döngüsünün Kullanimi.

C# da Diziler Diziler için ayni tipteki verilerin tutuldugu bir koleksiyon diyebiliriz. Örnegin integer verinin bir yigin seklinde tutulmasi için dizileri kullaniriz. C# da diziler referans tipinde degiskenlerdendir. C# da tanimlanan tüm diziler System.Array sinifindan türemis bir nesnedir. C# da diziler asagidaki gibi tanimlanir. ? 1 <veri tipi>[] <degisken ismi> = new <veri tipi>[<dizinin boyutu>]; 10 adet integer veri tutan bir dizinin tanim ise ? 1 int [] integerDizi = new int [10]; Bir dizinin boyutlari sabittir ve kullanilmadan önce belirlenmelidir. Dizi boyutunu belirlemek için baska bir degiskende kullanabilirsiniz. ? 1 2 int boyut = 10; int [] integerDizi = new int [boyut]; Diziyi tanimlama ve baslangiç degerlerini atama islemini ayri satirlardada yapabilirsiniz. ? 1 2 int [] integerDizi; integerDizi = new int [10]; Ayrica dizileri tanimlarken, dizi içine atmak istedigin

JavaScript ile Popup Pencereleri

Popup pencereleri bir sayfa içinde ek bir pencere açma islemidir. Popup pencereler JavaScript kullanarak açilirlar. Popup pencereler yaygin olarak reklam göstermek amaciyla kullanilir. Diger bir kullanim amaci ise yardim sayfalari tasarlamak içindir. Ihtiyaciniz dogrultusunda farkli amaçlar için kullanilabilirler. Popup pencereler; Sayfa yüklenmesinde,Sayfadan çikildiginda,Kullanici bir linki tikladiginda açilabilir. Sayfa yüklenirken veya kapatilirken bir popup açmak için body etiketi içine asagidaki kodu yazmaniz yeterlidir. Sayfa yüklenirken ? 1 <body onload= "javascript: alert(Load islemi!')" > Sayfa Kapatilirken ? 1 <body onunload= "javascript: alert('UnLoad islemi!')" Link tiklandiginda ? 1 <a href= "javascript: alert('link Tiklandi!')" >Popup Aç!</a> Popup olarak yeni bir pencere açmak istiyorsak window.open() metodunu kullaniriz. Window.open metodun