Javada kare çizip köşelerine 1 2 3 4 yazmam gerekiyor yardımcı olur musunuz? ACİLLL
Java Çizim Yardım
Cevaplar
Ö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.
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;
Simdi bunlarin hareketlerini (tiklaninca ne yapacaklarini) denetleyecek olan merciye, yani ActionListenere bildirmemiz lazim. Aksi taktirde, tiklansalar bile uygulamamizin bundan haberi dahi olmayacaktir.
Son olarak bir de içerisinde kare ve daire seçenekleri olan seçenek (Choice) menüsü ekleyelim:
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;
Panelimizin rengi de yesil olsun;
Panelimiz hazir. Simdi komponentlerimizi (tuslar ve seçenek) panelimize ekleyelim:
Tabiî unutmamamiz gereken birsey var; o da, üzerinde komponentlerimizin bulundugu panelimizi asil containere atmak!
Tuslar adli panelimizi BorderLayoutun 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 daireden hangisi seçilmisse onu çizecegiz,
sil tusu ile ekrandaki sekli silecegiz,
buyut (+) ile seklin buyumesini, kucult (-) ile de kuculmesini saglayacagiz.
Öncelikle JAVAda herhangi bir sekli çizmemiz için lazim olan yordami çagiralim (daha dogrusu Canvas sinifindan override etmeliyiz):
Verilen emir çok basit;
eger sekiller seçenegindeki itemin etiketi kare ise g.fillRect(x1, y1, x2, y2); islemini yap, yani içi dolu bir kare çiz,
eger sekiller seçenegindeki itemin 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:
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 interfaceinden implemente edecegimiz actionPerformed yordami içine yazmaliyiz. Varligi ActionListenere bildirilen bir tusa basildiginda bu yordam devreye girer ve verilen emirleri yerine getirir. Simdi kodlari gorelim:
Not: JAVAda 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?
Javada bu da kodlar vasitasi ile oluyor (bu bizim uygulamamiz için geçerli).
Iste lazim olan kod:
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:
Sanirim simdi bütün taslar yerine oturdu J
Uygulama kodlarimizin tamami:
ALINTIDIR

"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); |
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("-"); |
| ciz.addActionListener(this); sil.addActionListener(this); buyut.addActionListener(this); kucult.addActionListener(this); |
| sekiller = new Choice(); sekiller.add("kare"); sekiller.add("daire"); |
Öncelikle bir panel olusturalim. Panelimizin ismi de tuslar olsun;
| 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); |
Simdi sira, bütün bu komponentlerin ne ise yarayacagini belirlemeye geldi.
ciz tusu ile sekiller seçenegindeki kare ya da daireden hangisi seçilmisse onu çizecegiz,
sil tusu ile ekrandaki sekli silecegiz,
buyut (+) ile seklin buyumesini, kucult (-) ile de kuculmesini saglayacagiz.
Öncelikle JAVAda 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); } |
eger sekiller seçenegindeki itemin etiketi kare ise g.fillRect(x1, y1, x2, y2); islemini yap, yani içi dolu bir kare çiz,
eger sekiller seçenegindeki itemin 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; |
(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 interfaceinden implemente edecegimiz actionPerformed yordami içine yazmaliyiz. Varligi ActionListenere 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(); } |
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?
Javada 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); } }); |
| public static void main(String arg[]){ new Cizim().setVisible(true); } |
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); } |