Java Çizim Yardım

or147

Üyecik
Ö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);
}

ALINTIDIR
 
Üst