<< index       < bölüm 5     > bölüm 7          


6.1 GİRİŞ . 244

6.2 GRAPHICS VE GRAPHICS2D SINIFLARI 244

6.3 RENK KONTROLÜ .. 247

6.4 YAZI KONTROLU .. 253

6.5 ÇiZGi ÇiZiMi 256

6.6 DiKDÖRTGEN ÇIZiMi 259

6.7 ÇİZİLEN ŞEKİLLERİN DEĞİŞTİRİLEREK ÇİZİMİ (TRANSFORM) 265

6.8 OVAL VE AÇILI OVAL ÇİZİMİ 267

6.9 ÇİZİMİN SEÇİLEN BİR RESİMLE DOLDURULMASI 270

6.10 POLYGON ÇİZİMİ 273

6.11 GENELLEŞTİRİLMİŞ EĞRİ ÇİZİMİ 276

6.12 RESİM GÖSTERİMİ 280

6.13 ALIŞTIRMALAR



      BÖLÜM 6 : GRAFİKLER, FONTLAR VE RENKLER


      6.1 GİRİŞ

 

Daha önce applet çizerken java.awt kütüphanesi ndeki grafik (Graphics) sınıfı nı kullanmıştık. Ve grafik (Graphics) sinifinina ait drawString metotunu kullanarak applete yazı yazdırmıştık. Şimdi bu sınıfın diğer özelliklerini ve metotlarını öğreneceğiz.

 

Graphics sınıfı java.lang.Object sınıfının altında yer alır. Bu gurupta aynı zamanda grafik çiziminin çeşitli fazlarında kullanılan java.awt.Color, java.awt:Font, java.awt.FontMetrics, java.awt, java.awt.Graphics, java.awt.Polygon yer alır. Daha detaylı grafik çizme işlemleri tanımlayabilen java.awt. Graphics2D paketi java.awt.Graphics paketinden türetilmiştir. Ayrıca java.awt.BasicStroke, java.awt.GradientPaint, java.awt.TexturePaint gibi temel grafik alt programları da java.lang.Object altında tanımlanmıştır. Temel şekilleri çizdirmeye yarayan java.awt.geom.GeneralPath, java.awt.geom.Line2D, java.awt.geom.RectangularShape de java.lang.Object altında tanımlanır. java.awt.geom.Arc2D, . java.awt.geom.Ellipse2D, . java.awt.geom.Rectangle2D, . java.awt.geom.RoundRectangle2D gibi çizim paketleri de java.awt.geom.RectangularShape paketinin alt paketleri olarak tanımlanmıştır.

 

Graphics sınıfı, yazı yazma, çizgi çizme, dikdörtgen, oval çizme gibi bir dizi metotu barındırır. Bunun dışında awt kütüphanesinin önemli bir sınıfı da Color sınıfıdır. Color sınıfı  rekleri tanımlar ve değişik renklerin kullanımına imkan verir. Font sınıfı  grafikte kullanılan yazıların fontlarının (yazı tipinin ve boyutunun) belirlenmesi amacıyla kullanılır. FontMetrics sınıfı  fontların boyutlarının belirlenmesiyle ilgili metotları içerir. Polygon sınıfı polygon çizimiyle ilgili metotları barındırır. Bu metodların bir kısmını burada göreceğiz. Temel olarak Graphics ve Graphics2D sınıflarını grafik çiziminde kullanacağız, Bu işlemi yaparken de diğer tüm yardımcı grafik sınıflarından yararlanacağız. Graphics2D sınıfı daha yeni olarak tanımlanmış ve Graphics sınıfından türetilmiş bir sınıftır. Fakat çok daha komleks grafik çizim kapasitelerini barındırır.

 

Java appletlerinde çizim yaparken ilk hatırlamamız gereken nokta, koordinat merkezinin ekranın sol üst köşesi olduğudur. X ekseni sola doğru, Y ekseni aşağıya doğru gider.

 

06001.JPG


Şekil 6.1 Java grafik koordinat  sistemi, x ve y eksenleri

 

Y ekseninin alta doğru gitmesi konsol programlarında (ve ilk konsol programlama ortamı olan satır yazıcılarında) satırların alta dogru ilerlemesi gibi tarihi bir nedene dayanmaktadır. Bütün bilgisayar diileri ve ekranı grafik programlamalarında standartdır.

 

      6.2 GRAPHICS VE GRAPHICS2D SINIFLARI

 

Graphics sınıfı grafik çizimi için gerekli olan bir çok metotu içinde barındırır. Grafik sınıfı java.lang.Object sınıfının alt sınıflarındandır. Grafik çizme amacıyla genellikle Graphics sınıfından bir nesne paint veya paintComponent metotunun içinde çağırılır. Paint metotunun tanımı şöyledir

 

public void paint (Graphics g)

 

Bu tanım Applet, Japplet,JFrame extend etmiş programlardan çağırılabilir. Paint metodu tüm bu üç sınıfın türetildiği Component sınıfında tanımlanmıştır. javax.swing sınıfı altında tanımlanan JComponent sınıfında ise paintComponent metodu tanımlanmıştır. JComponentin alt metodu JPanel bu metodu kullanır. Tanımı paint metoduna benzer

 

 public void paintComponent  (Graphics g)

 

paint veya paintComponent metodları  Applet, Japplet, Frame, JFrame, Panel, JPanel sınıfları tarafından direk olarak program açıldığında çağırılır. Kullanıcı tarafından çağırılmaz.  Tekrar kullanıcı tarafından çağırılması gerektiğinde ise repaint metotu kullanılır ve repaint metotu üzerinden indirek olarak paint metotu çağırılır. Bu metodun tanımı :

public void repaint  ()

şeklindedir.

İkinci ilginç metod update metodudur. Bu metod

public void update  (Graphics g)

şeklinde tanımlanmıştır. Update metodu çağırıldığında Graphics metodu sistem tarafından otomatik olarak gönderilir. Graphics2D sınıfı Graphics sınıfının bir alt sınıfı olarak tanımlanmıştır. Bu sınıf Graphicss sınıfına göre çok daha kompleks çizimler yapabilen metodlara sahiptir. Burada graphics ve Graphics2D de yer alan bazı sınıf ve çizim tekniklerini yakından inceleyeceğiz.

 

6.1.1 drawString , drawChars ve drawBytes  metotları

 

Graphics sınıfının altmetodları olan bu metotların tanımları şu şekilde verilmiştir.

 

public abstract void drawString( String stringYazı, int x,int y)
public void drawChars( char charYazı[], int baslangıçindeksi,int yazılacakharfsayısı, int x,int y)
public void drawBytes( byte byteYazı[],
int başlangıçindeksi,int yazılacakharfsayısı, int x,int y)

 

drawString metotu bir string değişkenini verilen x ve y koordinatlarından başlayarak çizer.

DrawChars bir boyutlu Char tipi değişken dizisini başlangiçindeksi indeksinden baslayarak yazılacakharfsayısı kadar kısmını x ve y koordinatlarından başlıyarak çizer. DrawByte metotu da drawChars metotu gibidir tek değişikliği Byte türü boyutlu değişken kullanmasıdır.

 

Program 6.1. de bu metotların kullanılmasını açıklayan bir program verilmiştir.


Program 6.1 : ciz.java programı : drawString,drawChars,drawBytes metotlarının kullanılması

 

import java.applet.Applet;

import java.awt.*;

 

public class ciz extends Applet

{

 private String s ="Bunu drawString Metoduyla yazdır";

 private char c[]={'c','h','a','r','s',' ','8'};

 private byte b[]={'b','y','t','e',25,26,27};

 

 public void paint(Graphics g)

 {

 g.setColor(new Color(0,0,100));

 g.setFont(new Font("SansSerif",Font.PLAIN,24));

 g.drawString(s,100,25);

 g.drawChars(c,2,3,100,50);

 g.drawBytes(b,0,5,100,75);

 }

}

 

06002.JPG


Şekil 6.2 drawString drawChars drawBytes metotlarını kullanan ciz programının
Applet çıktısı

Şimdi aynı işlemi ve aynı metodları Graphics2D üzerinden yaptıralım :

 

 Program 6.2 : ciz2DSWF_2000.java programı : drawString,drawChars,drawBytes metotlarının swing JFrame ve Graphics2D ile birlikte kullanılması

 

import java.awt.*;

import java.awt.event.*;

import java.awt.geom.*;

import javax.swing.*;

import renk;

 

public class ciz2DSWF_2000 extends JFrame {

 

    final static Color bg = Color.white;

    final static Color fg = Color.black;

    final static Color red = Color.red;

    final static Color white = Color.white;

    private String s ="Bunu drawString Metoduyla yazdır";

    private char c[]={'k','a','r','e','k','t','e','r','l','e','r'};

 

    public ciz2DSWF_2000()

    {

        //Initialize drawing colors

        super("String character çizimi");

        setBackground(bg);

        setForeground(fg);

    }

 

    public void paint(Graphics g) {

        Graphics2D g2 = (Graphics2D)g;

        g2.setFont(new Font("TimesRoman",Font.BOLD,14));

        g2.drawString(s,100,50);

        //ikinci charecterden başlayarak 5 character yaz.

        g2.drawChars(c,2,5,100,100);

 

    }

 

    //=====================================================

      public static void main(String[] args)

      {

      ciz2DSWF_2000 pencere= new ciz2DSWF_2000();

      pencere.addWindowListener(new BasicWindowMonitor());

      pencere.setSize(350,200);

      pencere.setVisible(true);

      }

}

 

Burada hemen belirtelimki swing sınıflarını kullanırken Graphics2D sınıfları kullanmak zorunda değiliz, ama burada genel olarak swing ve Graphics2D kullanımlarını birlikte sunacağız. Bu programın çıktısı da bir önceki programın çıktısında olduğu gibidir :

06003.JPG

Şekil 6.3 drawString drawChars  metotlarını kullanan ciz2DSWF_2000 programının
swing JFrame çıktısı

 

Programdan da görüleceği gibi paint metodu yine Graphics cinsinden çağırılmakta , daha sonra        

Graphics2D g2 = (Graphics2D)g;

Kullanılarak adres Graphics2D sınıfından nesneye yüklenmektedir.

 

  6.3 RENK KONTROLÜ

 

Appletlerde renk controlu Color sınıfını kullanarak yapılır. Renk olusumunda monitör ve Televizyon sistemlerinde kullanılan RG B ( Red- Green-Blue =  Kırmızı- Yesil - Mavi ) sistemi temel alınır. Bu üç renk monitorde 0-255 arası değerler alabilir. Üç rengin karışımı toplam 256*256*256 renk tanımlar.

Color sınıfı kurucu metotları şu şekilden tanımlanır.  
 

public Color( int kirmizi,int yesil,int mavi) //her renk 0-255 arası 

public Color(float kirmizi,float yeşil,float mavi) //her renk 0.0-1.0 arası 

Color sınıfında ayrıca renk degerlerini okuyabildiğimiz 

public int getRed() // Kırmızı tonunu oku 
public int getGreen()//Yesil tonunu oku 
public int getBlue()//Mavi tonunu oku 
public abstract Color getColor() //rengi oku

metotları ve rengi değiştirebildiğimiz

public abstract Color setColor(Color c)

metotu mevcuttur. Color sınıfında sabit olarak tanımlanmış :


Tablo 6.1 Color sınıfında tanımlanmış sabir renkler


Renk sabiti

Renk

RGB değeri

Public final static Color Orange

Portakal  

255,200,0

Public final static Color pink

Pembe

255,175,175

public final static Color cyan

Camgöbeği

0,255,255

public final static Color magenta

Mor

255,0,255

public final static Color yellow

Sarı

255,255,0

public final static Color black

Siyah

0,0,0

public final static Color white

Beyaz

255,255,255

public final static Color gray

Gri

128,128,128

public final static Color lightGray

Açık gri

192,192,192

public final static Color darkGray

Koyu Gri

64,64,64

public final static Color red

Kırmızı

255,0,0

public final static Color green

Yeşil

0,255,0

public final static Color blue

Mavi

0,0,255


Color sınıfının daha iyi anlaşılabilmesi amacıyla Color sınıfının bir alt sınıfı olan renk sınıfını tanımladık.

 

Program 6.3 : Color sınıfının alt sınıfı renk sınıfını tanımlayan renk.java programı :

import java.io.*;

import java.awt.*;

 

public class renk extends Color

{

  public final static renk kirmizi=new renk(255,0,0);

  public final static renk mavi=new renk(0,0,255);

  public final static renk siyah=new renk(0,0,0);

  public final static renk camgobegi=new renk(0,255,255);

  public final static renk koyugri=new renk(64,64,64);

  public final static renk gri=new renk(128,138,128);

  public final static renk yesil=new renk(0,255,0);

  public final static renk acikgri=new renk(192,192,192);

  public final static renk mor=new renk(255,0,255);

  public final static renk portakal=new renk(255,200,0);

  public final static renk pembe=new renk(255,175,175);

  public final static renk beyaz=new renk(255,255,255);

  public final static renk sari=new renk(255,255,0);

  public final static renk acikmavi=new renk(150,206,237);

  public final static renk lacivert=new renk(0,0,128);

  //burada kendi yeni renginizi tanımlayabilirsiniz.

 

  public renk(float kirmizi,float yesil, float mavi)

  {

  super(kirmizi,yesil,mavi);

  }

 

  public renk(double kirmizi,double yesil, double mavi)

  {

  super((float)kirmizi,(float)yesil,(float)mavi);

  }

 

  public renk(int kirmizi,int yesil, int mavi)

  {

  super(kirmizi,yesil,mavi);

  }

 

  public renk(int RGB)

  {

  super(RGB);

  }

 

  public renk(renk r)

  {

  super(r.getKirmizi(),r.getYesil(),r.getMavi());

  }

 

  public int getKirmizi()

  {

  return getRed();

  }

 

  public int getYesil()

  {

  return getGreen();

  }

 

  public int getMavi()

  {

  return getBlue();

  }

 

  public int getKYM()

  {

  return getRGB();

  }

 

  public Color toColor()

  {

  return (Color)this;

  }

 

  public static renk toRenk(Color r)

  {return (renk)r;}

 

  public String toString()

  {

  return "renk[ kirmizi "+getKirmizi()+" mavi "+getMavi()+" yesil "+getYesil()+"]";

  }

 

 //metodlar

 //static int HSBtoRGB(float hue,float saturation,float brightness)

 //getRed(),getGreen(),getBlue(),getRGB()

}

 

Renk sınıfını bir çok yerde Color sınıfı yerine kullanabiliriz. Kullanamadığımız durumlarda cast işlemcisi (Color) kullanılabilir.

 

Applette renk değiştirdiğimiz küçük bir örnek program yazalım :

Program 6.4 : renkTest.java

 

import java.awt.*;

import java.applet.Applet;

import renk;

 

public class RenkTest extends Applet

 {

 private int kirmizi,yesil,mavi;

 

 public void init()

 {

 kirmizi=150;

 yesil=255;

 mavi=125;

 // arka palanın rengi mavi olarak veriliyor

 setBackground(renk.mavi);

 }

 

 public void paint(Graphics g)

 {

 // yazýnýn rengi 100,255,125 olarak alýndý

 

 g.setColor(new renk(kirmizi,yesil,mavi));

 g.drawString("ABCDEFGHIJKLMNOPQRSTUVWXYZ",50,33);

 showStatus("Su andaki arkaplan rengi : "+getBackground());

 }

 }

 

06004.JPG

 

Şekil 6.4 Renk.html çıktısı

 

Bu programda kirmizi değeri 100, yesil değeri 255 ve mavi degeri de 125 alınmış ve setColor deyimiyle yeni renk tanımlanmıştır. Arka plan rengi ise public void setBackground(Color c)

Metotunu kullanarak maviye dönüştürülmüştür.

Aynı programın JApplet eşidi olan, aynı zamanda java komutuyla kendi çerçevesini de oluşturabilen bir eşdeğerini verelim. Renk2D sınıfında Graphics2D sınıfı kullanılmaktadır. Grafik kalitesini karşılaştırabilirsiniz.

 

  Program 6.5 : Renk2D.java programı

import java.awt.*;

import java.awt.event.*;

import java.awt.geom.*;

import javax.swing.*;

 

public class Renk2D extends JApplet {

  

    private int kirmizi,yesil,mavi;

  

    public void init()

    {

        kirmizi=100;

        yesil=255;

        mavi=125;

        setBackground(new Color(0,0,255));

        setForeground(new Color(kirmizi,yesil,mavi));

    }

 

  

    public void paint(Graphics g) {

        Graphics2D g2 = (Graphics2D) g;      

        g2.setPaint(new Color(kirmizi,yesil,mavi));

        g2.drawString("ABCDEFGHIJKLMNOPQRSTUVWXYZ",50,33);

        g2.drawString("Su andaki renk : "+g2.getColor(),50,53);

    }

 

    public static void main(String s[]) {

        JFrame f = new JFrame("Renk2D");

        f.addWindowListener(new WindowAdapter() {

            public void windowClosing(WindowEvent e) {System.exit(0);}

        });

        JApplet applet = new Renk2D();

        f.getContentPane().add("Center", applet);

        applet.init();

        f.pack();

        f.setSize(new Dimension(550,100));

        f.show();

    }

 

}

 

Renk2D sınıfının çıktısı :

 

06005.JPG

Şekil 6.4 Renk2D.java çıktısı

 

Swing sınıfında renk seçimini yapabilmek amacıyla JColorChooser adlı bir program tanımlanmıştır. Bu programı kullanarak renk grafik kutusunun rengini değiştirebildiğimiz renkSeciciSWF swing JFrame programı aşağıda verilmiştir.

 

Program 6.6 : renkSeciciSWF_2000 .java

import javax.swing.*;        // java swing sinifini cagir

import java.awt.*;          // java pencere kullanma sinifini cagir

import java.awt.event.*;    //  java pencereyi dinleme sinifini cagir

import BasicWindowMonitor;

 

public class renkSeciciSWF_2000 extends JFrame implements ActionListener

{

    // Renk secme ornegi

    JButton renkdegistir;

    Color r=Color.lightGray;

    Container c;

 

    // pencereyi baslatma metodu

    public renkSeciciSWF_2000()

    {

    super("JColorChoser ");

    c=getContentPane();

    c.setLayout(new FlowLayout())  ;

    renkdegistir=new JButton("renk değiştirmek için düğmeye basınız");

    renkdegistir.addActionListener(this);

    c.add(renkdegistir);

    }

 

    // girdi alanindaki olan olaylari dinleme metodu

    public void actionPerformed(ActionEvent e)

    {    r=JColorChooser.showDialog(this,"Renk seçiniz :",r);

    if(r==null)

      r=renk.acikgri;

    c.setBackground(r);

    repaint();

    }

 

     //=====================================================

      public static void main(String[] args)

      {

      //ana program

      renkSeciciSWF_2000 pencere= new renkSeciciSWF_2000();

      pencere.addWindowListener(new BasicWindowMonitor());

      pencere.setSize(350,200);

      pencere.setVisible(true);

      }

}


06006.JPG

06007.JPG


06008.JPG


06009.JPG



Şekil 6.6-6.9 renkSeciciSWF_2000.java java swing frame programı ve JcolorChooser renk seçme programı

 

Renk seciciSWF_2000.java programında temel olarak JFrame grafik çıktısı kullanılmıştır. Bu programın içerisinde çağırılan

 

r=JColorChooser.showDialog(this,"Renk seçiniz :",r);

 

metodu java kütüphanesinde yer almaktadır. ShowDialog metodu bize Color sınıfındaki renk değişkenini aktarmakta ve

c.setBackground(r);

komutuylada arka plan renklerini değiştirmektedir.

 

JFrame ve JApplet arasındaki farkı anlamaya biraz daha katkıda bulunması amacıyla aynı programı bir de JApplet olarak verelim :

 

 Program 6.7 : renkSeciciSWA_2000 .java

import javax.swing.*;        // java swing sinifini cagir

import java.awt.*;          // java pencere kullanma sinifini cagir

import java.awt.event.*;    //  java pencereyi dinleme sinifini cagir

import BasicWindowMonitor;

 

public class renkSeciciSWA_2000 extends JApplet implements ActionListener

{

    // Renk secme ornegi

    JButton renkdegistir;

    Color r=Color.lightGray;

    Container c;

    // pencereyi baslatma metodu

    public void init()

    {

    c=getContentPane();

    c.setLayout(new FlowLayout())  ;

    renkdegistir=new JButton("renk değiştirmek için düğmeye basınız");

    renkdegistir.addActionListener(this);

    c.add(renkdegistir);

    }

    // girdi alanindaki olan olaylari dinleme metodu

    public void actionPerformed(ActionEvent e)

    {

    r=JColorChooser.showDialog(this,"Renk seçiniz :",r);

    if(r==null)

      r=renk.acikgri;

    c.setBackground(r);

    repaint();

    }

}

 

JFrame ve JApplet programlarının en büyük farkı JFrame ana programdan (main) çalıştığı halde JApplet’in bir browser programından çalıştırılıyor olmasıdır. Burada da en dış çerçeve dışında JFrame ile aynı görüntüyü elde ederiz.

 

06010.JPG

Şekil 6.10 renkSeciciSWA_2000.java programının Appletviewer’daki çıktısı

 

      6.4 YAZI KONTROLU

Appletlerde yazı kontrolu Font sınıfı nı kullanarak yapılır. Şekil 5.3.1 de java 1.1.5 de kullanılabilecek tüm yazı stillerinin (font) listesini veren stil.java programını görüyoruz.

Program 6.8 : stil.java programı, java kütüphanesinde mevcut olan yazı sitillerini gösterir

 

import java.applet.*;
import java.awt.*;

public class stil extends Applet
{

public void paint(Graphics g)
{
String stilListesi[];
stilListesi=getToolkit()
.getFontList() ;
int y=15;
for(int i=0;i<stilListesi.length;i++)
{
g.drawString(stilListesi[i],15,y);
y+=15;
}
}
}

 

 
06011.JPG 


Şekil 6.11 stil.java programı, java kütüphanesinde mevcut olan yazı sitillerini gösterir applet programının sonuçları.

Yine aynı programın swing JApplet eşitini verelim :

 

Program 6.9 : stil2D.java programı, java kütüphanesinde mevcut olan yazı sitillerini gösterir

 

import java.awt.*;

import java.awt.event.*;

import java.awt.geom.*;

import javax.swing.*;

 

public class stil2D extends JApplet {

  

    public void init()

    {

        setBackground(Color.white);

        setForeground(Color.black);

    }

 

    public void paint(Graphics g)

    {

        Graphics2D g2 = (Graphics2D) g;      

        String stilListesi[];

        stilListesi=getToolkit().getFontList(); 

        int y=15;

        for(int i=0;i<stilListesi.length;i++)

        {

        g2.drawString(stilListesi[i],15,y);

        y+=15;

        }

    }

 

    public static void main(String s[]) {

        JFrame f = new JFrame("stil2D");

        f.addWindowListener(new WindowAdapter() {

            public void windowClosing(WindowEvent e) {System.exit(0);}

        });

        JApplet applet = new stil2D();

        f.getContentPane().add("Center", applet);

        applet.init();

        f.pack();

        f.setSize(new Dimension(550,300));

        f.show();

    }

}

 

06012.JPG

Şekil 6.12 : stil2D.java program çıktısı

 

Bu yazı sitillerinden birisi asağıda verilen yazı tiplerinden birisiyle beraber ve verilen belli bir yazı boyutunda gösterilebilir.

 

public final static int PLAIN : düz yazı sitili  
public final static int BOLD : Kalın yazı sitili
 
public static int ITALIC : İtalik (yatık) yazı sitili
 

 

bu tanımlardaki final  sözcüğü bu ifadelerin değişken değil sabit olduğunu gösterir.Font sınıfının kurucu metotu şu şekildedir.

 

Public Font( String s, int yazı_sitili, int harf_boyutu);

 

Bir appletin yazı sitili Graphics sınıfındaki setFont metotuyla değiştirilebilir.

 

Public abstract void setFont(Font f)

 

Örnek olarak aşağıdaki deyimi verebiliriz :

 

g.setFont (new Font(“Serif”,Font.BOLD,12);

 

Şimdi setFont metotunu küçük bir örnekte kullanarak gösterelim :

 

Program 6.10 :  RenkFont.java programı, java kütüphanesindeki Font uygulamasını gösterir  

 

import java.awt.*;
import java.applet.Applet;

public class RenkFont extends Applet
{
private int kirmizi,yesil,mavi;

public void init()
{
kirmizi=100;
yesil=255;
mavi=125;
}

public void paint(Graphics g)
{
g.setColor(new Color(kirmizi,yesil,mavi));
setBackground(new Color(0,0,255));
g.setFont(new Font("TimesRoman",Font.BOLD,36));
g.drawString("ABCDEFGHIJKLMNOPQRSTUVWXYZ",50,33);
showStatus
("Su andaki font : "+g.getFont());
}
}

 

06013.JPG


Şekil 6.13 RenkFont.html programı, java kütüphanesindeki Font uygulamasını gösterir

 

bu programın da Japplet eşdeğerini verelim:

 

Program 6.11 :  RenkFont2D.java swing JApplet programı, java kütüphanesindeki Font uygulamasını gösterir  

 

import java.awt.*;

import java.awt.event.*;

import java.awt.geom.*;

import javax.swing.*;

 

public class RenkFont2D extends JApplet {

  

    private int kirmizi,yesil,mavi;

  

    public void init()

    {

        kirmizi=100;

        yesil=255;

        mavi=125;

        setBackground(new Color(0,0,255));

        setForeground(new Color(kirmizi,yesil,mavi));

    }

 

  

    public void paint(Graphics g)

    {

        Graphics2D g2 = (Graphics2D) g;      

        g2.setColor(new Color(kirmizi,yesil,mavi));

        setBackground(new Color(0,0,255));

        Font font=g2.getFont();

        g2.setFont(new Font(font.getName(),Font.BOLD,24));

        g2.drawString("ABCDEFGHIJKLMNOPQRSTUVWXYZ",50,33);

        g2.drawString("Su andaki font : "+g.getFont(),50,70);

        g2.setFont(new Font(font.getName(),Font.PLAIN,12));    

        g2.drawString("Su andaki font : "+g.getFont(),50,85);

   }

 

    public static void main(String s[]) {

        JFrame f = new JFrame("RenkFont2D");

        f.addWindowListener(new WindowAdapter() {

            public void windowClosing(WindowEvent e) {System.exit(0);}

        });

        JApplet applet = new RenkFont2D();

        f.getContentPane().add("Center", applet);

        applet.init();

        f.pack();

        f.setSize(new Dimension(550,200));

        f.show();

    }

}

 

06014.JPG

Şekil 6.14 RenkFont2D.java JFrame programı, java kütüphanesindeki Font uygulamasını gösterir

 

      6.5 ÇiZGi ÇiZiMi

 

Javada çizgi çizmek için kullanılan temel metot Graphics sınıfında drawLine metotu dur. Bu metot Graphics sınıfında tanımlanmıştır. Kurucu metotu :

 

Public abstract void drawLine(
int x1, // ilk noktanın x koordinatı
int y1, //ilk noktanın y koordinatı
int x2, // ikinci noktanın x koordinatı
int y2) //ikinci noktanın y koordinatı

 

Graphics2D sınıfında ise çizgi çiziminde java.awt.geom kütüphanesinde tanımlanan Line2D sınıfı, Graphics2D sınıfındaki draw metoduyla birlikte kullanılır.

 

Bir küçük örnek problem cizgiciz.java' da drawLine metotunun kullanımını görelim:

 

 Program 6.12 : Çizgi çizim örneği cizgiciz.java  

 

import java.applet.*;
import java.applet.Applet;

import java.awt.*;

 

public class cizgiciz extends Applet

{

 public void paint(Graphics g)

 {

 g.setColor(new Color(0,0,0));

 g.setFont(new Font("SansSerif",Font.PLAIN,24));

 g.drawLine(10,10,230,95);

 }

}

 

06015.JPG



Şekil 6.615 ve çizginin appletde görünümü

 

Şimdi aynı problemin yaklaşık eşidini cizgiSWF_2000.java programında görelim :

 

Program 6.13 : Çizgi çizim örneği cizgiSWF_2000.java 

 

import java.awt.*;

import java.awt.event.*;

import java.awt.geom.*;

import javax.swing.*;

import renk;

public class cizgiSWF_2000 extends JFrame {

 

    final static Color bg = Color.white;

    final static Color fg = Color.black;

    final static Color red = Color.red;

    final static Color white = Color.white;

 

    public cizgiSWF_2000()

    {

        //Initialize drawing colors

        super("çizgi çizimi");

        setBackground(bg);

        setForeground(fg);

    }

 

    public void paint(Graphics g) {

        Graphics2D g2 = (Graphics2D)g;

        g2.setPaint(Color.black);

        Line2D l=new Line2D.Double(50,50,100,75);

        g2.draw(l);

        g2.setStroke(new BasicStroke(1f,BasicStroke.CAP_ROUND,

        BasicStroke.JOIN_ROUND,1f,new float[] {5f},0f));

        Line2D l1=new Line2D.Double(50,150,100,175);

        g2.draw(l1);

    }

 

    //=====================================================

      public static void main(String[] args)

      {

      cizgiSWF_2000 pencere= new cizgiSWF_2000();

      pencere.addWindowListener(new BasicWindowMonitor());

      pencere.setSize(350,200);

      pencere.setVisible(true);

      }

}

 

06016.JPG

Şekil 6.16 ve çizginin cizgiSWF_2000 JFrame çıktısında görünümü

 

Bu programdaki temel çizim metodlarına göz atalım :

        Graphics2D g2 = (Graphics2D)g;

Graphics sınıfı g nesnesini Graphics2D sınıfi g2 nesnesine aktarır.

        g2.setPaint(Color.black);

Grafik çizim rengini siyah olarak tanımlar.

        Line2D l=new Line2D.Double(50,50,100,75);

İlk devamlı çizginin koordinatlarını tanımlar

        g2.draw(l);

İlk devamli çizgiyi çizer

        g2.setStroke(new BasicStroke(1f,BasicStroke.CAP_ROUND,

        BasicStroke.JOIN_ROUND,1f,new float[] {5f},0f));

Çizgiyi noktalı çizme komutunu tanımlar

        Line2D l1=new Line2D.Double(50,150,100,175);

Noktalı çizginin koordinatlarını tanımlar

        g2.draw(l1);

Noktalı çizgiyi çizer.

 

Burada bizim için yeni bir kavram olan noktalı çizgi çizmenin detaylarına biraz göz atalım. Noktalıçizgi oluşturmak için temel olarak setStroke metodunu kullanıyoruz. Bu metodun içinde Basic Stroke metodu bir nesne yaratıyoruz. BasicStroke türü nesne çizgi kalınlığı, çizgi bağlama sitili,çizgi ucu bitiş sitili ve çizgi-boşluk bilgisi içerir. Çizgi kalınlığı çizgi istikametine dik olarak ölçülür. Çizgi kalınlığı 1f (buradaki f sayının float temel değişken türü olduğunu belitir) 0.35277 milimetreye eşittir. Yalnız transformasyon kullanıldığında bu değişebilir. Transformasyonlara biraz sonra değineceğiz.

 

Çizgi bağlama sitili iki çizginin birbirine bağlandığı noktadaki şeklini belirler. BasicStroke sınıfında 3 bağlanma sitili mevcuttur. Bunlar :

JOIN_BEVEL

JOIN_MITER

JOIN_ROUND

sitilleridir. Çizgi ucu bitiş sitilleri boş çizgi ucunun şeklini belirtir. Yine temel olarak 3 BasicStroke çizgi ucu bitiş sitili mevcuttur. Bunlar :

CAP_BUTT

CAP_ROUND

CAP_SQUARE

sitilleridir. Çizgi boşluk bilgisi birbirini takip eden şeffaf ve görünür çizgi parçacıkları ve bunların boylarını tanımlar. Bir ara boşluk değişkeni ve çizgi boşluk çizgi boşluk olmak üzere bir seriden oluşur. Son olarak son rakam serinin hangi elemanından çizime başlanacağını gösterir  Örneğin:

  g2.setStroke(new BasicStroke(1,BasicStroke.CAP_ROUND,             

        BasicStroke.JOIN_ROUND,0,new float[] {10,5,2,5},0));

10 boyutu bir çizgi 5 boşluk 2 boyutu çizgi 5 boşluk belirtir.

  g2.setStroke(new BasicStroke(1,BasicStroke.CAP_ROUND,             

        BasicStroke.JOIN_ROUND,5,new float[] {5},0));

5 boşluk ve 5 çizgi belirtir. cizgiSWF_2000.java programında çeşitli stoke tiplerini deneyebilirsiniz.

      6.6 DiKDÖRTGEN ÇİZİM İ

 

Java Graphics sınıfında  dikdörtgen çizmek için kullanılan temel metot drawRect  metotudur. Bu metot Graphics sınıfında tanımlanmıştır. Bu metotların tanımı :

 

Public abstract void drawRect(
int x1, // üst tepe noktanın x koordinatı
int y1, // üst tepe noktanın y koordinatı
int en, // dikdörgenin genişliği
int yukseklik) // dikdörtgenin yüksekliği

 

Bu metota ilave olarak dikdörtgenin içini verilen renkte boyayan

 

Public abstract void fillRect(
int x1, // üst tepe noktanın x koordinatı
int y1, // üst tepe noktanın y koordinatı
int en, // dikdörgenin genişliği
int yukseklik) // dikdörtgenin yüksekliği

 

ve dikdörtgeni arkaplan renginde boyayan (silen)

 

Public abstract void clearRect(
int x1, // üst tepe noktanın x koordinatı
int y1, // üst tepe noktanın y koordinatı
int en, // dikdörgenin genişliği
int yukseklik) // dikdörtgenin yüksekliği
metotları mevcuttur. DrawRect ve fillRec metotunun kullanımı Program 6.6 da verilmiştir.


Program 6.14 : dikdortgenCiz.java

import java.applet.Applet;
import java.awt.*;

public class dikdortgenCiz extends Applet
{

public void paint(Graphics g)
{
g.setColor(new Color(255,0,0));
g.drawRect(10,10,100,50);
g.fillRect(129,10,100,50);
}
}

 

06017.JPG

Şekil 6.17 dikdortgenCiz.java programı ve dikdortgenCiz.html appleti

 

Graphics2D metodunda dikdörtgen çizmek için

g2.draw(new Rectangle2D.Double(x, y,dikdortgenEn,dikdortgenYukseklik));

kullanılır.

Dikdörtgenin içini maviye boyamak için

        g2.setPaint(Color.blue);

        Rectangle2D dikdortgen2=new Rectangle2D.Double(50,50,100,40);

        g2.fill(dikdortgen2);

kullanılabilir. Graphics2D de tek renk yerine değişen bir renk profiliyle boyamak da mümkündür. Örneğin :

        final static Color beyaz=Color.white;

        final static Color siyah=Color.black;

        GradientPaint kirmizidanbeyaza=new GradientPaint(250,50,kirmizi,350,90,beyaz);

        g2.setPaint(kirmizidanbeyaza);

        Rectangle2D dikdortgen4=new Rectangle2D.Double(250,50,100,40);

        g2.fill(dikdortgen4);

kodu dikdörtgeni kırmızıdan beyaza dönüşen bir spekturumla boyar. Tüm bu kodu bir örnek problemde gösterelim :

 

Program 6.15 : dikdortgenSWF-2000.java

 

import java.awt.*;

import java.awt.event.*;

import java.awt.geom.*;

import javax.swing.*;

 

public class dikdortgenSWF_2000 extends JFrame {

 

    final static Color kirmizi=Color.red;

    final static Color beyaz=Color.white;

    final static Color siyah=Color.black;

 

    public dikdortgenSWF_2000()

    {

        super("Dikdörtgen çizimi");

        setBackground(Color.lightGray);

        setForeground(siyah);

    }

 

    public void paint(Graphics g) {

        Graphics2D g2 = (Graphics2D)g;

        g2.setPaint(Color.blue);

        Rectangle2D dikdortgen1=new Rectangle2D.Double(55,55,90,30);

        g2.fill(dikdortgen1);

        g2.setPaint(siyah);

        Rectangle2D dikdortgen2=new Rectangle2D.Double(50,50,100,40);

        g2.draw(dikdortgen2);

        g2.setStroke(new BasicStroke(2f,BasicStroke.CAP_ROUND,

        BasicStroke.JOIN_ROUND,3f,new float[] {10f},0f));

        g2.setPaint(Color.black);

        Rectangle2D dikdortgen3=new Rectangle2D.Double(50,150,100,40);

        g2.draw(dikdortgen3);

        GradientPaint kirmizidanbeyaza=new GradientPaint(250,50,kirmizi,350,90,beyaz);

        g2.setPaint(kirmizidanbeyaza);

        Rectangle2D dikdortgen4=new Rectangle2D.Double(250,50,100,40);

        g2.fill(dikdortgen4);

        GradientPaint kirmizidanmaviye=new GradientPaint(250,150,kirmizi,350,190,Color.blue);

        g2.setPaint(kirmizidanmaviye);

        Rectangle2D dikdortgen5=new Rectangle2D.Double(250,150,100,40);

        g2.fill(dikdortgen5);

        g2.setStroke(new BasicStroke(2f,BasicStroke.CAP_ROUND,

        BasicStroke.JOIN_ROUND,1f,new float[] {5f},0f));

        g2.setPaint(Color.black);

        g2.draw(dikdortgen5);

    }

 

    //=====================================================

      public static void main(String[] args)

      {

      dikdortgenSWF_2000 pencere= new dikdortgenSWF_2000();

      pencere.addWindowListener(new BasicWindowMonitor());

      pencere.setSize(400,300);

      pencere.setVisible(true);

      }

}

 

Bu programın çıktısı :

06018.JPG

 

Şekil 6.18     çeşitli dikdörtgen çizimlerinin  dikdortgenSWF_2000   JFrame çıktısında görünümü

 

Graphics sınıfında Köşeleri yuvarlatılmış dikdörtgen çizmek içinse drawRoundRect metotu kullanılır

 

Public abstract void drawRoundRect(
int x1, // üst tepe noktanın x koordinatı
int y1, // üst tepe noktanın y koordinatı
int en, // dikdörgenin genişliği
int yukseklik, // dikdörtgenin yüksekliği
int koseeni, // yuvarlak kosenin eni
int koseyuksekligi )// yuvarlak kosenin yuksekligi

 

Bu metota ilave olarak dikdörtgenin içini verilen renkte boyayan

 

Public abstract void fillRoundRect(
int x1, // üst tepe noktanın x koordinatı
int y1, // üst tepe noktanın y koordinatı
int en, // dikdörgenin genişliği
int yukseklik, // dikdörtgenin yüksekliği
int koseeni, // yuvarlak kosenin eni
int koseyuksekligi )// yuvarlak kosenin yuksekligi

metotu da paralel olarak tanımlanmıştır. Yine bir örnek problemde bu tanımı kullanacak olursak :

 

Program 6.16 : yuvarlakKoseliDikdortgenCiz.java programı 

 

import java.applet.Applet;
import java.awt.*;

public class yuvarlakKoseliDikdortgenCiz extends Applet
{
public void paint(Graphics g)
{
g.setColor(new Color(0,0,255));
g.setFont(new Font("SansSerif",Font.PLAIN,12));
g.drawRoundRect(10,10,100,100,15,15);
g.fillRoundRect(120,10,100,100,15,15);
}
}

 

06019.JPG


Şekil 6.19 yuvarlakKoseliDikdortgenCiz.html   appleti

 

Graphics2D sınıfında koşeleri yuvarlatılmış dikdörtgen çizmek için :

g2.draw(new Rectangle2D.Double(x, y,dikdortgenEn,dikdortgenYukseklik,xKöşeYarıçapı,yKöşeYarıçapı));

metodları kullanılır. Rakamsal örnek verirsek :

        g2.setPaint(Color.blue);

        RoundRectangle2D dikdortgen2=new RoundRectangle2D.Double(50,50,100,40,15,15);

        g2.draw(dikdortgen2);

kullanılabilir. Dikdörtgenin içini boyamak içinse:

        g2.setPaint(Color.blue);

        RoundRectangle2D dikdortgen2=new RoundRectangle2D.Double(50,50,100,40,15,15);

        g2.fill(dikdortgen2);

       

kodu kullanılabilir. Elbette bir önceki örnekte olduğu gibi spektrumlu boyama da mümkündür. Tüm bu kodu bir örnek problemde gösterelim

 

Program 6.17 : yuvarlakKoseliDikdortgenSWF_200 0.java

 

import java.awt.*;

import java.awt.event.*;

import java.awt.geom.*;

import javax.swing.*;

 

public class yuvarlakKoseliDikdortgenSWF_2000 extends JFrame {

 

    final static Color kirmizi=Color.red;

    final static Color beyaz=Color.white;

    final static Color siyah=Color.black;

    public yuvarlakKoseliDikdortgenSWF_2000()

    {

        super("Yuvarlak Köşeli Dikdörtgen Çizimi");

        setBackground(Color.lightGray);

        setForeground(siyah);

    }

 

    public void paint(Graphics g) {

        Graphics2D g2 = (Graphics2D)g;

        g2.setPaint(Color.blue);

        RoundRectangle2D dikdortgen1=new RoundRectangle2D.Double(55,55,90,30,15,15);

        g2.fill(dikdortgen1);

        g2.setPaint(siyah);

        RoundRectangle2D dikdortgen2=new RoundRectangle2D.Double(50,50,100,40,15,15);

        g2.draw(dikdortgen2);

        g2.setStroke(new BasicStroke(2f,BasicStroke.CAP_ROUND,

        BasicStroke.JOIN_ROUND,3f,new float[] {10f},0f));

        g2.setPaint(Color.black);

        RoundRectangle2D dikdortgen3=new RoundRectangle2D.Double(50,150,100,40,15,15);

        g2.draw(dikdortgen3);

        GradientPaint kirmizidanbeyaza=new GradientPaint(250,50,kirmizi,350,90,beyaz);

        g2.setPaint(kirmizidanbeyaza);

        RoundRectangle2D dikdortgen4=new RoundRectangle2D.Double(250,50,100,40,15,15);

        g2.fill(dikdortgen4);

        GradientPaint kirmizidanmaviye=new GradientPaint(250,150,kirmizi,350,190,Color.blue);

        g2.setPaint(kirmizidanmaviye);

        RoundRectangle2D dikdortgen5=new RoundRectangle2D.Double(250,150,100,40,15,15);

        g2.fill(dikdortgen5);

        g2.setStroke(new BasicStroke(2f,BasicStroke.CAP_ROUND,

        BasicStroke.JOIN_ROUND,1f,new float[] {5f},0f));

        g2.setPaint(Color.black);

        g2.draw(dikdortgen5);

    }

 

    //=====================================================

      public static void main(String[] args)

      {

      yuvarlakKoseliDikdortgenSWF_2000 pencere=

      new yuvarlakKoseliDikdortgenSWF_2000();

      pencere.addWindowListener(new BasicWindowMonitor());

      pencere.setSize(400,300);

      pencere.setVisible(true);

      }

}

 

06020.JPG

Şekil 6.20     çeşitli köşesi yuvarlatılmış dikdörtgen çizimlerinin  yuvarlakKoselidikdortgenSWF_2000   JFrame çıktısında görünümü

 

Graphics’de 3 boyutlu dikdortgen çizen draw3DRect  ve fill3Drect  metotları mevcutttur. Bu metotların tanımları şu şekilde verilmiştir.

 

Public abstract void draw3DRect(
int x1, // üst tepe noktanın x koordinatı
int y1, // üst tepe noktanın y koordinatı
int en, // dikdörgenin genişliği
int yukseklik, // dikdörtgenin yüksekliği
boolean yukarıkaldırma) // yukarı kalkık 3üncü boyut

 

Public abstract void fill3DRect(
int x1, // üst tepe noktanın x koordinatı
int y1, // üst tepe noktanın y koordinatı
int en, // dikdörgenin genişliği
int yukseklik, // dikdörtgenin yüksekliği
boolean yukarıkaldırma) // yukarı kalkık 3üncü boyut
   

 Program 61.8 : ucBoyutluDikdortgenCiz.java programı

 

import java.applet.Applet;
import java.awt.*;

public class ucBoyutluDikdortgenCiz extends Applet
{
public void paint(Graphics g)
{
g.setColor(Color.yellow);
g.setFont(new Font("SansSerif",Font.PLAIN,12));
g.draw3DRect(10,10,100,100,true);
g.fill3DRect(120,10,100,100,true);
g.draw3DRect(10,120,100,100,false);
g.fill3DRect(120,120,100,100,false);
}
}

 

06021.JPG

 

Şekil 6.21  ucBoyutluDikdortgenCiz. html  appleti

 

      6.7 ÇİZİLEN ŞEKİLLERİN DEĞİŞTİRİLEREK ÇİZİMİ (TRANSFORM)

 

Graphics2D sınıfında çizilen şekiller dinamik olarak değiştirilebilirler. Bu değişimler döndürme, köşedençekip uzatma gibi değişik işlemler olabilir. Bu değiştirme prosesini önce bir örnekle gösterelim, sonrada izah etmeye çalışalım.

Program 6.19 : donmusDikdortgenSWF-2000.java

 

import java.awt.*;

import java.awt.event.*;

import java.awt.geom.*;

import javax.swing.*;

 

public class donmusDikdortgenSWF_2000 extends JFrame {

 

    final static Color kirmizi=Color.red;

    final static Color beyaz=Color.white;

    final static Color siyah=Color.black;

 

    public donmusDikdortgenSWF_2000()

    {

        super("Dödürülmüş - çekilmiş Dikdörtgen çizimleri");

        setBackground(Color.lightGray);

        setForeground(siyah);

    }

 

    public void paint(Graphics g) {

        Graphics2D g2 = (Graphics2D)g;

        g2.setPaint(Color.blue);

        Rectangle2D dikdortgen1=new Rectangle2D.Double(55,55,90,30);

        AffineTransform at= AffineTransform.getRotateInstance(45,50,50);

        g2.setTransform(at);

        g2.fill(dikdortgen1);

        g2.setPaint(siyah);

        Rectangle2D dikdortgen2=new Rectangle2D.Double(50,50,100,40);

        g2.draw(dikdortgen2);

        g2.setTransform(new AffineTransform());

        g2.setStroke(new BasicStroke(2f,BasicStroke.CAP_ROUND,

        BasicStroke.JOIN_ROUND,3f,new float[] {10f},0f));

        g2.setPaint(Color.black);

        Rectangle2D dikdortgen3=new Rectangle2D.Double(50,150,100,40);

        AffineTransform at1= AffineTransform.getScaleInstance(1.5,1.5);

        g2.setTransform(at1);

        g2.draw(dikdortgen3);

        g2.setTransform(new AffineTransform());

        GradientPaint kirmizidanbeyaza=new GradientPaint(250,50,kirmizi,350,90,beyaz);

        g2.setPaint(kirmizidanbeyaza);

        Rectangle2D dikdortgen4=new Rectangle2D.Double(250,50,100,40);

        AffineTransform at2= AffineTransform.getShearInstance(0.4,0);

        g2.setTransform(at2);

        g2.fill(dikdortgen4);

        g2.setTransform(new AffineTransform());

        GradientPaint kirmizidanmaviye=

        new GradientPaint(250,150,kirmizi,350,190,Color.blue);

        g2.setPaint(kirmizidanmaviye);

        Rectangle2D dikdortgen5=new Rectangle2D.Double(250,150,100,40);

        g2.fill(dikdortgen5);

        g2.setStroke(new BasicStroke(2f,BasicStroke.CAP_ROUND,

        BasicStroke.JOIN_ROUND,1f,new float[] {5f},0f));

        g2.setPaint(Color.black);

        AffineTransform at3= AffineTransform.getTranslateInstance(0.0,10.0);

        g2.setTransform(at3);

        g2.draw(dikdortgen5);

        g2.setTransform(new AffineTransform());

    }

 

    //=====================================================

      public static void main(String[] args)

      {

      donmusDikdortgenSWF_2000 pencere= new donmusDikdortgenSWF_2000();

      pencere.addWindowListener(new BasicWindowMonitor());

      pencere.setSize(400,300);

      pencere.setVisible(true);

      }

}

 

06022.JPG

Şekil 6.22     çeşitli şekli değiştirilmiş  dikdörtgen çizimlerinin  donmusDikdortgenSWF-2000  JFrame çıktısında görünümü

   

        AffineTransform at= AffineTransform.getRotateInstance(x,y,açıDerece);

     Şekli x,y noktası etrafında açıDerece kadar saat akranının tersi yönde döndürür.

        AffineTransform at2= AffineTransform.getShearInstance(xÇekişi,yÇekişi);

     Şekli x ekseninde xÇelişi kadar, y ekseninde yÇekişi kadar uzatır (orijinal şekilden elastik ve üst köşesi  tutturulmuş şekilde)

        AffineTransform at1= AffineTransform.getScaleInstance(xBoyutFaktörü,yBoyutFaktörü);

Şeklin boyutunu xBoyutFaktörü,yBoyutFaktörü faktörleriyle çarparak büyütür.

        AffineTransform at3= AffineTransform.getTranslateInstance(xTaşımaFaktörü,yTaşımaFaktörü);

Şekli yerinden hareket ettirir. Orijinal transforma geri dönmek için :

        g2.setTransform(new AffineTransform());

metodu çağırılabilir.

 

      6.8 OVAL VE AÇILI OVAL ÇİZİMİ

Graphics sınıfıOval çizimi için drawOval ve fillOval metotları kullanılır bu metotların tanımı şöyledir :

Public abstract void drawOval (
int x1, // üst tepe noktanın x koordinatı
int y1, // üst tepe noktanın y koordinatı
int en, // ovalin genişliği
int yukseklik) // ovalin yüksekliği

 

Public abstract void fillOval(  
int x1, // üst tepe noktanın x koordinatı
int y1, // üst tepe noktanın y koordinatı
int en, // ovalin genişliği
int yukseklik) // ovalin yüksekliği

(x1,y1) koordinatının ovalle ilişkisini daha iyi anlayabilmek için aşağıdaki grafiği verebiliriz :

 

06023.JPG

 

Şekil 6.23 Oval tanımı koordinat sistemi

 

Oval programını küçük bir örnek programda kullanalım :
 

 Program 6.20 : daireCiz.java programı

 

import java.applet.Applet;
import java.awt.*;
public class daireCiz extends Applet
{

public void paint(Graphics g)
{
g.setColor(new Color(0,0,255));
g.drawOval(10,10,50,50);
g.fillOval(70,10,50,50);
}
}

 

06024.JPG


Şekil 6.24 daireCiz.html apleti

 

Graphics ile  bir ovalin tamamını değilde sadece bir bölümünü çizmek dilenilirse, drawArc ve fillArc metotları kullanılabilir. Bu metotların tanımı :

 

Public abstract void drawArc(
int x1, // üst tepe noktanın x koordinatı
int y1, // üst tepe noktanın y koordinatı
int en, // ovalin genişliği
int yukseklik, // ovalin yüksekliği
int başlangıçaçısı, //arkın başlangıç açısı, derece
int çizimaçısı) // arkın çizim açısı, derece

 

Public abstract void fillArc(
int x1, // üst tepe noktanın x koordinatı
int y1, // üst tepe noktanın y koordinatı
int en, // ovalin genişliği
int yukseklik, // ovalin yüksekliği

int başlangıçaçısı, //arkın başlangıç açısı, derece
int çizimaçısı) // arkın çizim açısı, derece

 

Şimdi de bu metotu kullanan bir bilgisayar programı yazalım :
 

Program 6.21 :   arcCiz.java, arc çizimi programı

 

import java.applet.Applet;
import java.awt.*;

public class arcCiz extends Applet
{

public void paint(Graphics g)
{
g.setColor(new Color(0,0,255));
g.setFont(new Font("SansSerif",Font.PLAIN,12));
g.drawOval(70,10,50,50);
g.drawArc(10,10,50,50,30,60);
g.fillArc(70,10,50,50,30,60);
}
}

 

06025.JPG


Şekil 6.25 arcCiz.html   apleti

 

Graphics2D sınıfında oval (elips) çizmek için :

        Graphics2D g2 = (Graphics2D)g;

        g2.setPaint(Color.blue);

        Ellipse2D elips1=new Ellipse2D.Double(x,y,en,yükseklik);

        g2.draw(elips1);

kullanabiliriz. İçini boyamak için ise :

        g2.fill(elips1);

metodunu kullanırız.

Yine örneğimizde kullanacak olursak :

 

Program 6.21 : elipsSWF_2000 .java

 

import java.awt.*;

import java.awt.event.*;

import java.awt.geom.*;

import javax.swing.*;

 

public class elipsSWF_2000 extends JFrame {

 

    final static Color kirmizi=Color.red;

    final static Color beyaz=Color.white;

    final static Color siyah=Color.black;

 

    public elipsSWF_2000()

    {

        super("Elips çizimi");

        setBackground(Color.lightGray);

        setForeground(siyah);

    }

 

    public void paint(Graphics g) {

        Graphics2D g2 = (Graphics2D)g;

        g2.setPaint(Color.blue);

        Ellipse2D elips1=new Ellipse2D.Double(55,55,90,30);

        g2.fill(elips1);

        g2.setPaint(siyah);

        Ellipse2D elips2=new Ellipse2D.Double(50,50,100,40);

        g2.draw(elips2);

        g2.setStroke(new BasicStroke(2f,BasicStroke.CAP_ROUND,

        BasicStroke.JOIN_ROUND,3f,new float[] {10f},0f));

        g2.setPaint(Color.black);

        Ellipse2D elips3=new Ellipse2D.Double(50,150,100,40);

        g2.draw(elips3);

        GradientPaint kirmizidanbeyaza=new GradientPaint(250,50,kirmizi,350,90,beyaz);

        g2.setPaint(kirmizidanbeyaza);

        Ellipse2D elips4=new Ellipse2D.Double(250,50,100,40);

        g2.fill(elips4);

        GradientPaint kirmizidanmaviye=new GradientPaint(250,150,kirmizi,350,190,Color.blue);

        g2.setPaint(kirmizidanmaviye);

        Ellipse2D elips5=new Ellipse2D.Double(250,150,100,40);

        g2.fill(elips5);

        g2.setStroke(new BasicStroke(2f,BasicStroke.CAP_ROUND,

        BasicStroke.JOIN_ROUND,1f,new float[] {5f},0f));

        g2.setPaint(Color.black);

        g2.draw(elips5);

    }

 

    //=====================================================

      public static void main(String[] args)

      {

      elipsSWF_2000 pencere= new elipsSWF_2000();

      pencere.addWindowListener(new BasicWindowMonitor());

      pencere.setSize(400,300);

      pencere.setVisible(true);

      }

}

 

06026.JPG

Şekil 6.26     çeşitli oval (elips) çizimlerinin  elipsSWF_2000JFrame çıktısında görünümü

 

      6.9 ÇİZİMİN SEÇİLEN BİR RESİMLE DOLDURULMASI

Graphics2D sınıfında bir grafiği boyarken bir resim dosyasının içinde tanımlanan bir motifi de kullanabiliriz.

 

Program 6.22 :textureE lipsSWF_2000.java

 

import javax.swing.*;

import java.awt.geom.*;

import java.awt.image.*;

import java.net.URL;

import java.awt.*;

 

public class textureElipsSWF_2000 extends JFrame {

 

    TexturePaint tp = getImageTexture("sybex.gif");

    final static Color kirmizi=Color.red;

    final static Color beyaz=Color.white;

    final static Color siyah=Color.black;

 

    public textureElipsSWF_2000()

    {

        super("Elips çizimi");

        setBackground(beyaz);

        setForeground(siyah);

    }

 

    public TexturePaint getImageTexture(String imageFile)

    {

    URL url = getClass().getResource(imageFile);

    Image img = getToolkit().getImage(url);

    try {

      MediaTracker tracker = new MediaTracker(this);

      tracker.addImage(img, 0);

      tracker.waitForID(0);

    } catch (Exception e) {}

    int width = img.getWidth(this);

    int height = img.getHeight(this);

    BufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);

    Graphics g = buffImg.getGraphics();

    g.drawImage(img, 0, 0, this);

    Rectangle2D rect = new Rectangle(0, 0, width, height);

    return new TexturePaint(buffImg, rect);

  }

  //************

    public void paint(Graphics g) {

        Graphics2D g2 = (Graphics2D)g;

        g2.setPaint(tp);

        Ellipse2D elips1=new Ellipse2D.Double(55,55,90,30);

        g2.fill(elips1);

        g2.setPaint(siyah);

        Ellipse2D elips2=new Ellipse2D.Double(50,50,100,40);

        g2.draw(elips2);

        g2.setStroke(new BasicStroke(2f,BasicStroke.CAP_ROUND,

        BasicStroke.JOIN_ROUND,3f,new float[] {10f},0f));

        g2.setPaint(Color.black);

        Ellipse2D elips3=new Ellipse2D.Double(50,150,100,40);

        g2.draw(elips3);

        GradientPaint kirmizidanbeyaza=new GradientPaint(250,50,kirmizi,350,90,beyaz);

        g2.setPaint(kirmizidanbeyaza);

        Ellipse2D elips4=new Ellipse2D.Double(250,50,100,40);

        g2.fill(elips4);

        g2.setPaint(tp);

        Ellipse2D elips5=new Ellipse2D.Double(250,150,100,40);

        g2.fill(elips5);

        g2.setStroke(new BasicStroke(2f,BasicStroke.CAP_ROUND,

        BasicStroke.JOIN_ROUND,1f,new float[] {5f},0f));

        g2.setPaint(Color.black);

        g2.draw(elips5);

    }

 

    //=====================================================

      public static void main(String[] args)

      {

      textureElipsSWF_2000 pencere= new textureElipsSWF_2000();

      pencere.addWindowListener(new BasicWindowMonitor());

      pencere.setSize(300,300);

      pencere.setVisible(true);

      }

  //************

}

06027.JPG

 

Şekil 6.27     çeşitli oval (elips) çizimlerinin ve arkaplan resimli boyama işleminin   textureElipsSWF_2000JFrame çıktısında görünümü

 

Burada texture sybex.gif dosyasından

public TexturePaint getImageTexture(String imageFile)

metodu kullanılarak aktarılmış ve aynen  yeni bir renk gibi çizim ortamında kullanılmıştır.

Şimdi de Graphics2D metoduyla arc çizdirmeye bakalım arc yukarda da bahsettiğimiz gibi tamamlanmamış bir elipstir.

 

Program 6.23 : arcSWF_2000.java

 

import java.awt.*;

import java.awt.event.*;

import java.awt.geom.*;

import javax.swing.*;

 

public class arcSWF_2000 extends JFrame {

    final static Color kirmizi=Color.red;

    final static Color beyaz=Color.white;

    final static Color siyah=Color.black;

 

    public arcSWF_2000()

    {

        super("arc çizimi");

        setBackground(Color.lightGray);

        setForeground(siyah);

    }

 

    public void paint(Graphics g) {

        Graphics2D g2 = (Graphics2D)g;

        g2.setPaint(Color.blue);

        Arc2D arc1=new Arc2D.Double(55,55,90,30,90,270,Arc2D.PIE);

        g2.fill(arc1);

        g2.setPaint(siyah);

        Arc2D arc2=new Arc2D.Double(50,50,100,40,90,270,Arc2D.PIE);

        g2.draw(arc2);

        g2.setStroke(new BasicStroke(2f,BasicStroke.CAP_ROUND,

        BasicStroke.JOIN_ROUND,3f,new float[] {10f},0f));

        g2.setPaint(Color.black);

        Arc2D arc3=new Arc2D.Double(50,150,100,40,90,270,Arc2D.PIE);

        g2.draw(arc3);

        GradientPaint kirmizidanbeyaza=new GradientPaint(250,50,kirmizi,350,90,beyaz);

        g2.setPaint(kirmizidanbeyaza);

        Arc2D arc4=new Arc2D.Double(250,50,100,40,90,270,Arc2D.PIE);

        g2.fill(arc4);

        GradientPaint kirmizidanmaviye=new GradientPaint(250,150,kirmizi,350,190,Color.blue);

        g2.setPaint(kirmizidanmaviye);

        Arc2D arc5=new Arc2D.Double(250,150,100,40,90,270,Arc2D.PIE);

        g2.fill(arc5);

        g2.setStroke(new BasicStroke(2f,BasicStroke.CAP_ROUND,

        BasicStroke.JOIN_ROUND,1f,new float[] {5f},0f));

        g2.setPaint(Color.black);

        g2.draw(arc5);

    }

 

    //=====================================================

      public static void main(String[] args)

      {

      arcSWF_2000 pencere= new arcSWF_2000();

      pencere.addWindowListener(new BasicWindowMonitor());

      pencere.setSize(400,300);

      pencere.setVisible(true);

      }

}

 

06028.JPG

Şekil 6.28    çeşitli tamamlanmamış oval (ark) çizimlerinin arcSWF_20000 JFrame çıktısında görünümü

 

      6.10 POLYGON ÇİZİMİ


Graphics sınıfında Açık ve kapalı polygon şekilleri çizmek için drawPolygon
  ve fillPolygon   metotları kullanılır. Metotların tanımı :

Program 6.24 : drawPolygon.java

 

public abstract void drawPolygon(
int x[], // x koordinat vektörü
int y[], // y koordinatı vektörü
int nokta sayısı) // nokta sayısı

public abstract void drawPolyline(
int x[], // x koordinat vektörü
int y[], // y koordinatı vektörü
int nokta sayısı) // nokta sayısı

 

public abstract void drawPolygon( Polygon p) //Graphics sınıfı metotu

public Polygon() //Polygon sınıfı

public Polygon(
int x[], // x koordinat vektörü
int y[], // y koordinatı vektörü
int nokta sayısı) // nokta sayısı

 

Metot tanımlarından da görüldüğü gibi polygon int türü vektörle çizilebileceği gibi bu vektörü içinde barındıran Polygon sınıfı bir nesne kullanılarak ta çizilebilir.

 

Örnek olarak üçgen çizen bir program verelim :


  Program 6.25 :   ucgenCiz.java, poligon çizim programı

 

import java.applet.Applet;
import java.awt.*;
public class ucgenCiz extends Applet
{
public void paint(Graphics g)
{
int x[]={10,(int)(10+100*Math.cos(Math.PI/3.0)),110,10};
int y[]={100,(int)(100-100*Math.sin(Math.PI/3.0)),100,100};
int x1[]={130,(int)(130+100*Math.cos(Math.PI/3.0)),230,130};
int y1[];
y1=y;
g.setColor(new Color(0,0,255));
g.drawPolygon(x,y,4);
g.fillPolygon(x1,y1,4);
}
}

 

06029.JPG

 

Şekil 6.29 ucgenCiz.java programı ve apleti

 

Graphics2D programında grafik çizdirmek için kullanılan metodlar Graphics sınıfına göre oldukça değişiktir. Burada önce örnek programımızı verelim:

Program 6.26 : polygonSWF.java

 

import java.awt.*;

import java.awt.event.*;

import java.awt.geom.*;

import javax.swing.*;

 

public class polygonSWF extends JFrame

{

 

public polygonSWF()

{

super("Polygon çizimi");

}

 

public void paint(Graphics g)

{

int x[]={55,67,109,73,83,55,27,37,1,43};

int y[]={0,36,36,54,96,72,96,54,36,36};

Graphics2D g2=(Graphics2D)g;

GeneralPath yildiz=new GeneralPath();

yildiz.moveTo(x[0],y[0]);

for(int i=1;i<x.length;i++)

   {yildiz.lineTo(x[i],y[i]);}

yildiz.closePath();

g2.translate(200,200);

for(int i=0;i<20;i++)

  {

  g2.rotate(Math.PI/10.0);

  g2.setColor(new Color((int)(Math.random()*256),(int)(Math.random()*256),

  (int)(Math.random()*256)));

  g2.fill(yildiz);

 g2.setStroke(new BasicStroke(2));

 g2.setColor(Color.black);

  g2.draw(yildiz);

  }

}

 

      public static void main(String[] args)

      {

      polygonSWF pencere= new polygonSWF();

      pencere.addWindowListener(new BasicWindowMonitor());

      pencere.setSize(400,300);

      pencere.setVisible(true);

      }

 

}

 

06030.JPG

 

Şekil 6.30    çeşitli yıldızların (polygonun) çizim ve döndürme işlemi polygonSWF JFrame çıktısında görünümü

 

bu programda önce

 

int x[]={55,67,109,73,83,55,27,37,1,43};

int y[]={0,36,36,54,96,72,96,54,36,36};

GeneralPath yildiz=new GeneralPath();

yildiz.moveTo(x[0],y[0]);

for(int i=1;i<x.length;i++)

   {yildiz.lineTo(x[i],y[i]);}

yildiz.closePath();

 

ile yıldız tanımlanmış, ve

  g2.draw(yildiz);

ile çizilmiş, ve

g2.fill(yildiz);

ile içi boyanmıştır. Ayrıca

g2.translate(200,200); ile çizim başlama noktası 200,200 noktasına kaydırılmış ve

g2.rotate(Math.PI/10.0);

komutu ile döndürülmüştür. Programda setPAint kullanarak tesadüfi renkler seçilmiş ve yıldız çizimi doldurulmuştur.

 

Programda kullanılan

GeneralPath yildiz=new GeneralPath();

Terimine özellikle dikkatinizi çekmek isteriz. Bu terim GeneralPath nesnesi yıldızı tanımlar.

 

      6.11 GENELLEŞTİRİLMİŞ EĞRİ ÇİZİMİ

GeneralPath nesnesi kullanarak polinomdan çok daha kompleks çekiller de tanımlayabiliriz.

 

Program 6.28 : generalPathSWF_2000 .java

 

import java.awt.*;

import java.awt.event.*;

import java.awt.geom.*;

import javax.swing.*;

 

public class generalPathSWF_2000 extends JFrame {

 

    final static Color kirmizi=Color.red;

    final static Color beyaz=Color.white;

    final static Color siyah=Color.black;

 

    public generalPathSWF_2000()

    {

        super("ikinci ve üçüncü dereceden genel eğri çizimi");

    }

 

    public void paint(Graphics g) {

        Graphics2D g2 = (Graphics2D)g;

        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,

        RenderingHints.VALUE_ANTIALIAS_ON);

        setBackground(Color.lightGray);

        setForeground(siyah);

        Dimension boyut=getSize();

        int dx=boyut.width;

        int dy=boyut.height;

        g2.setPaint(siyah);

        g2.setStroke(new BasicStroke(3));

        g2.draw3DRect(0,0,dx-3,dy-3,true);

        g2.draw3DRect(3,3,dx-7,dy-7,false);

        GeneralPath sekil=new GeneralPath(GeneralPath.WIND_EVEN_ODD);

        sekil.moveTo(20,20);

        //quadratik ekleme

        sekil.quadTo(160,120,245,45);

        //kübik ekleme

        sekil.curveTo(195,95,295,145,245,195);

        sekil.curveTo(-80,110,345,110,20,195);

        sekil.curveTo(400,250,200,250,20,20);

        g2.draw(sekil);

    }

 

    //=====================================================

      public static void main(String[] args)

      {

      generalPathSWF_2000 pencere= new generalPathSWF_2000();

      pencere.addWindowListener(new BasicWindowMonitor());

      pencere.setSize(400,300);

      pencere.setVisible(true);

      }

}

06031.JPG

 

Şekil 6.31    ikinci ve üçüncü dereceden genel eğri çizimi, generalPathSWF_2000, JFrame çıktısında görünümü

 

Bu çizimdeki çizginin oldukça düzgün olduğuna dikkatinizi çekeriz. Bunu sağlayan temel komut :

        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,

        RenderingHints.VALUE_ANTIALIAS_ON);

Komutudur. Bu komut çizgileri daha düzgün hale getirir, fakat belli bir hesap ve hafıza kapasitesi harcar. Programı bu komutu çıkararak da çalıştırınız ve aradaki farkları inceleyiniz.

 

Şekli oluşturan temel komutlar:

        GeneralPath sekil=new GeneralPath(GeneralPath.WIND_EVEN_ODD);

        sekil.moveTo(20,20);

        //quadratik ekleme

        sekil.quadTo(160,120,245,45);

        //kübik ekleme

        sekil.curveTo(195,95,295,145,245,195);

komutlarıdır. Daha sonra bu şekiller

        g2.draw(sekil);

komutuyla çizdirilmiştir.

        g2.fill(sekil);

komutu burada kullanılmamakla birlikte, geçerli bir komuttur. Programda deneyiniz. Bu programda çizdirilen ikinci dereceden (quadratik eğriler) quadTo ve curveTo metodları kullanılarak oluşturulmuştur. Şimdi de ikinci derece polynom uydurmasını        QuadCurve2D sınıfını  kullanarak yapan  bir programı inceleyelim :

 

Program 6.29 : curve2SWF_2000 .java

 

import java.awt.*;

import java.awt.event.*;

import java.awt.geom.*;

import javax.swing.*;

 

public class curve2SWF_2000 extends JFrame {

 

    final static Color kirmizi=Color.red;

    final static Color beyaz=Color.white;

    final static Color siyah=Color.black;

 

    public curve2SWF_2000()

    {

        super("ikinci dereceden eğri çizimi");

    }

 

    public void paint(Graphics g) {

        Graphics2D g2 = (Graphics2D)g;

        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,

        RenderingHints.VALUE_ANTIALIAS_ON);

        setBackground(Color.lightGray);

        setForeground(siyah);

        Dimension boyut=getSize();

        int dx=boyut.width;

        int dy=boyut.height;

        g2.setPaint(siyah);

        g2.draw3DRect(0,0,dx-3,dy-3,true);

        g2.draw3DRect(3,3,dx-7,dy-7,false);

        g2.setPaint(siyah);

        QuadCurve2D qc2=new QuadCurve2D.Double(0,125,140,225,225,150);

        g2.draw(qc2);

        QuadCurve2D qc2_1=new QuadCurve2D.Double(0,200,155,225,225,170);

        g2.setPaint(Color.blue);

        g2.fill(qc2_1);

    }

 

    //=====================================================

      public static void main(String[] args)

      {

      curve2SWF_2000 pencere= new curve2SWF_2000();

      pencere.addWindowListener(new BasicWindowMonitor());

      pencere.setSize(400,300);

      pencere.setVisible(true);

      }

}

 

06032.JPG

Şekil 6.32    ikinci dereceden genel eğri çizimi, curve2SWF_2000, JFrame çıktısında görünümü

 

Şimdide üçüncü dereceden eğri uyduran bir program koduna göz atalım :

Program 6.30 : curve3SWF_2000.java

 

import java.awt.*;

import java.awt.event.*;

import java.awt.geom.*;

import javax.swing.*;

 

public class curve3SWF_2000 extends JFrame {

 

    final static Color kirmizi=Color.red;

    final static Color beyaz=Color.white;

    final static Color siyah=Color.black;

 

    public curve3SWF_2000()

    {

        super("üçüncü dereceden eğri çizimi");

    }

 

    public void paint(Graphics g) {

        Graphics2D g2 = (Graphics2D)g;

        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,

        RenderingHints.VALUE_ANTIALIAS_ON);

        setBackground(Color.lightGray);

        setForeground(siyah);

        Dimension boyut=getSize();

        int dx=boyut.width;

        int dy=boyut.height;

        g2.setPaint(siyah);

        g2.draw3DRect(0,0,dx-3,dy-3,true);

        g2.draw3DRect(3,3,dx-7,dy-7,false);

        g2.setPaint(siyah);

        CubicCurve2D cc3=new CubicCurve2D.Double(50,175,140,90,10,90,100,175);

        g2.draw(cc3);

        CubicCurve2D cc3_1=new CubicCurve2D.Double(50,275,140,190,10,190,100,275);

        g2.setPaint(Color.blue);

        g2.fill(cc3_1);

    }

 

    //=====================================================

      public static void main(String[] args)

      {

      curve3SWF_2000 pencere= new curve3SWF_2000();

      pencere.addWindowListener(new BasicWindowMonitor());

      pencere.setSize(400,300);

      pencere.setVisible(true);

      }

}

 

06033.JPG

 

Şekil 6.33    üçüncü dereceden genel eğri çizimi, curve3SWF_2000, JFrame çıktısında görünümü


      6.12 RESİM GÖSTERİMİ

 

Java dili sadece .gif ve .jpg standartlarındaki resimleri gösterebilir. Resim önce getImage  metotuyla bir Image sınıfı nesneye yuklenir, sonra drawImage  metotuyla gösterilir.

Orneğin Image resim=getImage(getDocumentBase(),”resim.gif”);

Ve resim g.drawImage(resim,1,1,this); deyimiyle çizilir. Burada ikinci ve üçüncü noktalar başlangıç x ve y koordinatlarıdır.Son olarak this resmin çizileceği appletiniçinde bulunulan sınıfın appleti olduğunu belirtmektedir.

 

Bir örnek problemle resim çizimini biraz daha belirgin hale getitelim :

Program 6.31:  resim.java resim aktarım programı 

 

import java.applet.Applet;

import java.awt.*;

 

public class resim extends Applet

{

 private Image res;

 public void init()

 {

 res=getImage(getDocumentBase(),"ballarat.gif");

 }

 

 public void paint(Graphics g)

 {

 g.drawImage(res,1,1,this);

 /*

 // resmi orijinalinin iki katı boyunda ciziniz

 int en=res.getWidth(this);

 int yukseklik=res.getWidth(this);

 g.drawImage(res,1,90,en*2,yukseklik*2,this);

 */

 }

 

}

 

06034.JPG

 

Şekil 6.34 : Resmin java üzerinden aktarılması, resim.html

 

Java grafik çizim olasılıkları burada verilenden çok aha geniş boyutludur. Bu bölümde veremediğimiz bir çok detayı javanın parasız olarak çekebileceğiniz döküman kütüphanesinde bulabilirsiniz.

 

 

      6.13 ALIŞTIRMALAR

 

1.        ciz1.java programını inceleyiniz.


Program 6.13 ciz1.java

 

import java.applet.Applet;
import java.awt.*;
public class ciz1 extends Applet
{
private String s ="Bunu drawString Metotuyla yazdir";
private char c[]={'c','h','a','r','s',' ','8'};
private byte b[]={'b','y','t','e',75,76,77};
public void init()
{
Color c=new Color(0,0,255);
setBackground(c);
}

public void paint(Graphics g)
{
g.setColor(new Color(100,255,125));
g.setFont(new Font("SansSerif",Font.PLAIN,24));
g.drawString(s,100,25);
g.drawChars(c,2,3,100,50);
g.drawBytes(b,0,6,100,75);
}
}

 

06015.JPG

 

Şekil 6.15 ciz1.html appleti

 

2.         İki boyutlu plot çizimi amacıyla bir program paketi hazırlanmıştır. Bu paket temel olarak üç java  programından oluşmaktadır. Birinci program dosyadan plot bilgisini okuyan Plot.java programıdır. Çizilecek Plotla ilgili en temel bilgi Plot.txt dosyasında bulunmaktadır. Bu dosyadaki ilk satır Pot başlığını, ikinci satır x ekseni başlığını, üçüncü satır y ekseni başlığını, dördüncü satır çizilecek iki boyutlu plot sayısını (okunacak dosya sayısını), beşinci ve sonraki satırlar plot bilgisinin olduğu dosya ismi, çizgi çizim türü, ve integer RGB renk değerlerini vermektedir. Çizgi çizim türlerini bazıları

  // plottype = 0 sürekli çizgi
  // plottype = 10 kullanıcı tarafından tanımlanan karakter
  // plottype = 20 dikdörtgen
  // plottype = 21 daire
  // plottype = 22 üçgen
  // plottype = 23 eşkenar dörtgen
  // plottype = 24 beşgen

  // plottype = 25 altıgen

eğer çizgi türü 10 olarak tanımlanmışsa kullanılacak olan karakterinde verilmesi gerekir

a.dat 10 * 0 0 255 gibi. Aşağıda örnek bir Plot.txt dosyası değeri verilmektedir.

 

türkçe yazı

x ekseni

y ekseni

2

a.dat 26  0 0 255

a.dat 5   0 0 255

 

Plot bilgi dosyasında iki kolon olarak x,y plot bilgisi verilir. Küçük bir örnek dosyası verecek olursak :

 

1 1
2 4
3 9
4 16
5 25
6 36
7 49

 

Burada bilgi dosyadan okunmaktadır.  Dosya okuma yazma komutlarını daha detaylı olarak 10. bölümde inceleyeceğiz.

 

Program 6.14 :  Plot.java
 

//======================================================
// Numerical Analysis package in java
// Plot class to plot 2D data
// Dr. Turhan Coban
// =====================================================
import java.io.*;

public class Plot
{
  public String label;                           // Plot Label
  public String xlabel;                          // X axis Label
  public String ylabel;                          // Y axis Label
  public String filename;                        // file name
  public double xmax,xmin,ymax,ymin;      // real max,min scale
  public int xabsmin,yabsmin,abswidth,absheight; // absolute max,min scale
  public int nmax;                               // max number of data points
  public int nline;                              // max number of data sets
  public double x[][];                    // x data
  public double y[][];                    // y=f(x) data
  public int n[];                                // n : number of data in each line
  public int red[],green[],blue[];                // color code 0-255
  public int plottype[];
  public int xgridon;
  public int ygridon;
  // plottype = 0 continuous line
  // plottype = 10 user defined character plot
  // plottype = 20 rectangle
  // plottype = 21 circle
  // plottype = 22 triangle
  // plottype = 23 diamond

  // plottype = 24 pentagon
  // plottype = 25 hexagon
  public char ch[];    // plot character (used with plottype 10)
  public int xntic;    // number of tics in x axis
  public int yntic;    // number of tics in y axis
  BufferedReader fin;
  BufferedReader ffile;
  File plotFile;
  File lineDataFile;
  public void set_plotwindow(int width,int height,double xip,double yip,double dxp,double dyp)
  {
    //sets rectangular plot window
    xabsmin   =  (int)(width*(xip+0.2));
    yabsmin   =  (int)(height*(yip+0.2));
    abswidth  =  (int)(width*dxp);
    absheight =  (int)(height*dyp);
  }

  public Plot(String pl,String xl,String yl,int xnt,int ynt
  ,int xgo,int ygo,String ifn[],int ipt[],int ir[],int ig[]
  ,int ib[]) throws IOException
  {
    xmin=9.99e50;
    xmax=-9.99e50;
    ymin=9.99e50;
    ymax=-9.99e50;
    xntic=8;
    yntic=8;
    double xtemp,ytemp;
    label=pl;
    xlabel=xl;
    ylabel=yl;
    nline=ifn.length;
    xntic=xnt;
    yntic=ynt;
    xgridon=xgo;
    ygridon=ygo;
    n=new int[nline];
    red=new int[nline];
    green=new int[nline];
    blue=new int[nline];
    plottype=new int[nline];
    ch=new char[nline];
    //read all data to determine limit values
    String fn[];
    fn=new String[nline];
    int i,j;
    for(i=0;i<nline;i++)
    {
       fn[i]=ifn[i];
       plottype[i]=ipt[i];
       if(plottype[i] == 10) ch[i]='*';
       red[i]=ir[i];
       green[i]=ig[i];
       blue[i]=ib[i];
       j=0;
       n[i]=0;

       //open ffile 
       try
       {
       ffile=new BufferedReader(new FileReader(fn[i]));
       } catch(IOException e)
         {
         System.err.println("Error Opening File \n"+e.toString());
         System.exit(1);
         }
       try
       {
          while(ffile!=null) 
          {
             xtemp=Text.readDouble(ffile);
             ytemp=Text.readDouble(ffile);
             if(xtemp<xmin) xmin=xtemp;
             if(xtempxmax) xmax=xtemp;
             if(ytemp<ymin) ymin=ytemp;
             if(ytempymax) ymax=ytemp;
             n[i]++;
          }
       } catch(EOFException e_eof) { ffile.close();}
       if(i==0) nmax=n[i];
       else
         {
         if(n[i]nmax) nmax=n[i];
         }
    x=new double[nline][nmax];
    y=new double[nline][nmax]; 
    for(i=0;i<nline;i++)
    {
       //open ffile
           try{
       ffile=new BufferedReader(new FileReader(lineDataFile));
              } catch(IOException e)
                 {
                 System.err.println("Error Opening File \n"+e.toString());
                 System.exit(1);
                 }
       for(j=0;j<n[i];j++)
       {
          x[i][j]=Text.readDouble(ffile);
          y[i][j]=Text.readDouble(ffile);
       }
    } 
    }
    set_plotwindow(400,400,0.1,0.1,0.9,0.9);
  }

 public Plot() throws IOException
  {
    //adding max-min prompts and input fields
    //initial values of max and mins
    // Structure of input file
    // filename
    // xlabel
    // ylabel

    // nline xntic yntic xgridon ygridon
    // datafilename plottype redcolor greencolor bluecolor
    // ........
    // datafilename plottype redcolor greencolor bluecolor

    //
    // A sample data file input :
    //

    // 4 10 10 1 1
    // b.dat 22 0 0 0
    // a.dat 21 0 255 0
    // a.dat 0 0 255 0
    // b.dat 0 0 0 255
    //
    // see above for meaning of plot types
    xmin=9.99e50;
    xmax=-9.99e50;
    ymin=9.99e50;
    ymax=-9.99e50;
    xntic=8;
    yntic=8;
    double xtemp,ytemp; 
    try{
       fin=new BufferedReader(new FileReader("Plot.txt"));
       } catch(IOException e)
       {
       System.err.println("Error Opening File \n"+e.toString());
       System.exit(1);
       }
    label=Text.readStringLine(fin);
    xlabel=Text.readStringLine(fin);
    ylabel=Text.readStringLine(fin);
    nline=Text.readInt(fin);
    xntic=Text.readInt(fin);
    yntic=Text.readInt(fin);
    xgridon=Text.readInt(fin);
    ygridon=Text.readInt(fin);
    n=new int[30];
    red=new int[30];
    green=new int[30];
    blue=new int[30];
    plottype=new int[30];
    ch=new char[30];
    //read all data to determine limit values
    String fn[];
    fn=new String[nline];
    int i,j;
    for(i=0;i<nline;i++)
    {
       fn[i]=Text.readString(fin);
       plottype[i]=Text.readInt(fin);
       if(plottype[i] == 10) ch[i]=Text.readChar(fin);
       red[i]=Text.readInt(fin);
       green[i]=Text.readInt(fin);
       blue[i]=Text.readInt(fin);
       j=0;
       n[i]=0;

       //open ffile 
           try{
       ffile=new BufferedReader(new FileReader(fn[i]));
       } catch(IOException e)
       {
       System.err.println("Error Opening File \n"+e.toString());
       System.exit(1);
       }
       try{
       while(ffile!=null)
       {
       xtemp=Text.readDouble(ffile);
       ytemp=Text.readDouble(ffile);
       if(xtemp<xmin) xmin=xtemp;
       if(xtempxmax) xmax=xtemp;
       if(ytemp<ymin) ymin=ytemp;
       if(ytempymax) ymax=ytemp;
       n[i]++;
       }
          } catch(EOFException e_eof)
          {
          //close ffile
          try{
          ffile.close();
             } catch(IOException e)
             {
             System.err.println("Error Closing File\n"+e.toString());
             System.exit(1);
             }
          } //End of EOFException

       if(i==0) nmax=n[i];
       else
         {
         if(n[i]nmax) nmax=n[i];
         }
    }
//close ffile
    try{
       ffile.close();
       } catch(IOException e)
       {
       System.err.println("Error Closing File\n"+e.toString());
       System.exit(1);
       }
    x=new double[nline][nmax];
    y=new double[nline][nmax];
    //re-read the data again to load it
    for(i=0;i<nline;i++)
    {
       //open ffile
           try{ 
       ffile=new BufferedReader(new FileReader(fn[i]));
       } catch(IOException e)
       {
       System.err.println("Error Opening File \n"+e.toString());
       System.exit(1);

       }
       for(j=0;j<n[i];j++)
       {
          x[i][j]=Text.readDouble(ffile);
          y[i][j]=Text.readDouble(ffile);

       }
    //close ffile
    try{
       ffile.close();
       } catch(IOException e)
       {
       System.err.println("Error Closing File\n"+e.toString());
       System.exit(1);
       }

    }
    set_plotwindow(400,400,0.1,0.1,0.9,0.9);
//close fin
    try{
       fin.close();
       } catch(IOException e)
       {
       System.err.println("Error Closing File\n"+e.toString());
       System.exit(1);
       }
  }

}

 

Program 6.15 :  PlotShapes.java
 


//======================================================
// Numerical Analysis package in java
// PlotShapes class
// This class convert graphic draw methods to
// plot coordinates and gives additional plotting methods
// Dr. Turhan Coban
// =====================================================
import java.io.*;
import java.awt.*;
import java.applet.Applet;

public class PlotShapes
{
Graphics g;
int xabsmin,yabsmin;
int absheight,abswidth;
double xmin,xmax,ymin,ymax;

public PlotShapes(Graphics gi,int xabsmini  ,int yabsmini,
                              int absheighti,int abswidthi,
                            double xmini,double xmaxi,
                            double ymini,double ymaxi)
{
// xabsmin   : absulute stating point x axis
// yabsmin   : absolute starting point y axis
// absheight : absoulute height of plotting window
// abswidth  : absolute width of plotting window

// xmin      : minimum x value (real number)
// xmax      : maximum x value (real number)
// ymin      : minimum y value (real number)
// ymax      : maximum y value (real number)
// g         : graphic object that actual drawing is done through
g=gi;
xabsmin=xabsmini;
yabsmin=yabsmini;
absheight=absheighti;
abswidth=abswidthi;
xmin=xmini;
xmax=xmaxi;
ymin=ymini;
ymax=ymaxi;
}

public void drawLine(int plottype,double x1,double y1,double x2,double y2)
{
// draw a line from (x1,y1) to (x2,y2)
       if(plottype==0) //draw a continuous line
       {
        g.drawLine( (int)(xabsmin+(x1-xmin)/(xmax-xmin)*abswidth),
                    (int)(yabsmin+absheight-(y1-ymin)/(ymax-ymin)*absheight),
                    (int)(xabsmin+(x2-xmin)/(xmax-xmin)*abswidth),
                    (int)(yabsmin+absheight-(y2-ymin)/(ymax-ymin)*absheight));
       }
}  //end of drawLine
 

public  void drawChar(char ch,double x1,double y1)
{
    // draws a single character at (x1,y1)
        char ch1[]=new char[1];
        ch1[0]=ch;
        int h=g.getFontMetrics().getHeight();
        int w=h-2;
        g.drawChars(ch1,0,1,
            (int)(xabsmin+(x1-xmin)/(xmax-xmin)*abswidth)-2,
            (int)(yabsmin+absheight-(y1-ymin)/(ymax-ymin)*absheight)+h/2);
}  //end of PlotShapes.drawChar

public void drawChars(char ch[],int firstspace,int numberofchars,
                                double x1,double y1)
{
// draws a character array from space firstspace to (firstspace+numberofchars)
// starting at (x1,y1)
        int h=g.getFontMetrics().getHeight();
        int w=h-2;
        g.drawChars(ch,firstspace,numberofchars,
            (int)((xabsmin+(x1-xmin)/(xmax-xmin)*abswidth)+5),
            (int)((yabsmin+absheight-(y1-ymin)/(ymax-ymin)*absheight)+h/2));

}  //end of PlotShapes.drawChars

public void drawString(String s,double x1,double y1)
{
    //draws a String at (x1,y1)
        int h=g.getFontMetrics().getHeight();
        int w=h-2;
        g.drawString(s,
            (int)(xabsmin+(x1-xmin)/(xmax-xmin)*abswidth),

            (int)(yabsmin+absheight-(y1-ymin)/(ymax-ymin)*absheight));

}  //end of PlotShapes.drawStrings

public void drawRect(double x1,double y1,int rectwidth,int rectheight)
{
// draw a rectangle starting at (x1,y1)
// with dimensions of (rectwidth,rectheight)
        g.drawRect(
        (int)(xabsmin+(x1-xmin)/(xmax-xmin)*abswidth-rectwidth/2),
        (int)(yabsmin+absheight-(y1-ymin)/(ymax-ymin)*absheight-rectheight/2),
              rectwidth,rectheight);

}//end of drawRect

public void drawOval(double x1,double y1,int width,int height)
{
// draw an oval with the centre of (x1,y1)
// with dimension of (width,height)
        g.drawOval(
            (int)(xabsmin+(x1-xmin)/(xmax-xmin)*abswidth-width/2),
            (int)(yabsmin+absheight-(y1-ymin)/(ymax-ymin)*absheight-height/2),
             width,height);
}//end of drawRect

public void drawPolygon(double x1,double y1,int radius,int side)
{
//draw a polygon of n sides n=3(trinagle),n=4(dimond)....
        double Pi=4.0*Math.atan(1.0);
        int xvalues[]=new int[side+1];
        int yvalues[]=new int[side+1];
        double angle_increase;
        double angle;
        angle_increase=2.0*Pi/side;
        angle=Pi/2.0;
        for(int i=0;i<side;i++)
        {
          xvalues[i]= (int)(Math.floor(xabsmin+(x1-xmin)/
          (xmax-xmin)*abswidth+radius*Math.cos(angle)));
          yvalues[i]= (int)(Math.floor(yabsmin+absheight-(y1-ymin)/
          (ymax-ymin)*absheight-radius*Math.sin(angle)));
          if(i==0) {xvalues[side]=xvalues[i];yvalues[side]=yvalues[i];}
          angle+=angle_increase;
        }
        g.drawPolygon(xvalues,yvalues,side+1);
}//end of drawPolygon

public void drawXTic(int ticNumber,double ticHeight,int ticSide)
{
        //draw a series of x axis tics
        double dtic=(xmax-xmin)/ticNumber;
        double x1=xmin;
        double y1=ymin;
        if(ticSide==0)
        {
        for(int i=0;i<=ticNumber;i++)
        {
          drawLine(0,x1,y1,x1,(y1-ticHeight));
          x1=x1+dtic;
        }
        }
        else

        {
        for(int i=0;i<=ticNumber;i++)
        {
         drawLine(0,x1,y1,x1,(y1+ticHeight));
         x1=x1+dtic;
         }
        }
}
 

public void drawYTic(int ticNumber,double ticWidth,int ticSide)
{
        //draw a series of y axis tics
        double dtic=(ymax-ymin)/ticNumber;
        double x1=xmin;
        double y1=ymin;
        if(ticSide==0)
        {
        for(int i=0;i<=ticNumber;i++)
        {
          drawLine(0,x1,y1,(x1-ticWidth),y1);
          y1=y1+dtic;
        }
        }
        else
        {

        for(int i=0;i<=ticNumber;i++)
           {
            drawLine(0,x1,y1,(x1+ticWidth),y1);
            y1=y1+dtic;
           }
        }
}

public void drawXGrid(int ticNumber)
{
        //draw x gridlies
        double dtic=(xmax-xmin)/ticNumber;
        double x1=xmin;
        for(int i=0;i<=ticNumber;i++)
        {
          drawLine(0,x1,ymin,x1,ymax);
          x1=x1+dtic;
        }
}

public void drawYGrid(int ticNumber)
{
        //draw y gridlines =====
        double dtic=(ymax-ymin)/ticNumber;
        double y1=ymin;
        for(int i=0;i<=ticNumber;i++)
        {
          drawLine(0,xmin,y1,xmax,y1);
          y1=y1+dtic;
        }
}

public void drawXNumbers(int ticNumber)
{

        //draw x numbers
        double dtic=(xmax-xmin)/ticNumber;
        double x1=xmin;
        double y1=ymin;
        String s;
        s="  ";
        for(int i=0;i<=ticNumber;i++)
        {
          s=Double.toString(Math.floor(x1*100.0)/100.00);
          g.drawString(s,(int)(xabsmin+(x1-xmin)/(xmax-xmin)*abswidth),
            (int)(yabsmin+absheight-(y1-ymin)/(ymax-ymin)*absheight)+20);
          x1=x1+dtic;
        }
}

public void drawYNumbers(int ticNumber)
{
        // draw y  numbers
        double dtic=(ymax-ymin)/ticNumber;
        double x1=xmin;
        double y1=ymin;
        String s;
        s="  ";
        for(int i=0;i<=ticNumber;i++)
        {
          s=Double.toString(Math.floor(y1*100)/100.0)+" ";
          g.drawString(s,(int)(xabsmin+(x1-xmin)/(xmax-xmin)*abswidth-40),
            (int)(yabsmin+absheight-(y1-ymin)/(ymax-ymin)*absheight));
          y1=y1+dtic;
        }
}

public void drawXLabel(String xLabel)
{
    // draw x labels
    double x1=xmin+(xmax-xmin)/2.0;
    double y1=ymin;
    g.drawString(xLabel,(int)(xabsmin+(x1-xmin)/(xmax-xmin)*abswidth),
            (int)(yabsmin+absheight-(y1-ymin)/(ymax-ymin)*absheight)+30);
}

public void drawYLabel(String yLabel)
{
    // draw y labels
    double x1=xmin-(xmax-xmin)/6.0;
    double y1=ymax-(ymax-ymin)/3.0;
    int n=yLabel.length();
    char ch[]=new char[n];
    yLabel.getChars(0,n,ch,0);
   // g.DrawString(yLabel,(int)(xabsmin+(x1-xmin)/(xmax-xmin)*abswidth-60),
   //         (int)(yabsmin+absheight-(y1-ymin)/(ymax-ymin)*absheight));
      for(int i=0;i<n;i++)
         {
         drawChar(ch[i],x1,y1);
         y1=y1-(ymax-ymin)/30;
         }
}

public void drawLabel(String Label)
{

    //draw graphic label
    double x1=xmin+(xmax-xmin)/2.0;
    double y1=ymax;
    g.drawString(Label,(int)(xabsmin+(x1-xmin)/(xmax-xmin)*abswidth),
            (int)(yabsmin+absheight-(y1-ymin)/(ymax-ymin)*absheight)-10);
}

public void
drawPlotLines(int i,int plottype[],double x[][],double y[][],int n[],char ch[])
{
    int j;
//draw lines
    if(plottype[i]==0)
      {
      for(j=0;j<n[i]-1;j++)
        {
        if((x[i][j]=xmin && x[i][j]<=xmax )
          && (y[i][j]=ymin && y[i][j]<=ymax))
        {
        if((x[i][j+1]=xmin && x[i][j+1]<=xmax) &&
           (y[i][j+1]=ymin && y[i][j+1]<=ymax))
           {
           drawLine(0,x[i][j],y[i][j],x[i][j+1],y[i][j+1]);
           }
        else if(x[i][j+1]xmax)
           {
              double b=(y[i][j+1]-y[i][j])/(x[i][j+1]-x[i][j]);
              double  a=y[i][j]-b*x[i][j];
              drawLine(0,x[i][j],y[i][j],xmax,(a+b*xmax));
           }
        else if(y[i][j+1]ymax)
           {
              double b=(y[i][j+1]-y[i][j])/(x[i][j+1]-x[i][j]);
              double a=y[i][j]-b*x[i][j];
              drawLine(0,x[i][j],y[i][j],(ymax-a)/b,ymax);
           }
        else if(x[i][j+1]xmax && y[i][j+1]ymax)
           {
              double b=(y[i][j+1]-y[i][j])/(x[i][j+1]-x[i][j]);
              double a=y[i][j]-b*x[i][j];
              drawLine(0,x[i][j],y[i][j],(ymax-a)/b,(a+b*xmax));
           }
        }
        else if((x[i][j+1]=xmin && x[i][j+1]<=xmax )
          && (y[i][j+1]=ymin && y[i][j+1]<=ymax))
        {
           if(x[i][j]<xmin)
           {
              double b=(y[i][j+1]-y[i][j])/(x[i][j+1]-x[i][j]);
              double  a=y[i][j+1]-b*x[i][j+1];
              drawLine(0,xmin,(a+b*xmin),x[i][j+1],y[i][j+1]);
           }
           if(y[i][j]<ymin)
           {
              double b=(y[i][j+1]-y[i][j])/(x[i][j+1]-x[i][j]);
              double  a=y[i][j+1]-b*x[i][j+1];
              drawLine(0,(ymin-a)/b,ymin,x[i][j+1],y[i][j+1]);

           }
        }
        }//end of for(j=0
      }//end of if(plottype
//draw characters
    else if(plottype[i]==10)
      {
        for(j=0;j<n[i];j++)
        {
          if((x[i][j]=xmin && x[i][j]<=xmax )
          && (y[i][j]=ymin && y[i][j]<=ymax))
             { drawChar(ch[i],x[i][j],y[i][j]); }
        }//end of for(j=0;
      }//end else if(plottype[i]==10)
//draw rectangles
    else if(plottype[i]==20)
      {
        for(j=0;j<n[i];j++)
        {
          if((x[i][j]=xmin && x[i][j]<=xmax )
          && (y[i][j]=ymin && y[i][j]<=ymax))
              { drawRect(x[i][j],y[i][j],4,4); }
        }//end of for(j=0;
      }//end else if(plottype[i]==20)
//draw circle
    else if(plottype[i]==21)
      {
        for(j=0;j<n[i];j++)
        {
          if((x[i][j]=xmin && x[i][j]<=xmax )
          && (y[i][j]=ymin && y[i][j]<=ymax))
            { drawOval(x[i][j],y[i][j],4,4); }
        }//end of for(j=0;
      }//end else if(plottype[i]==21)
    else if(plottype[i]=22 && plottype[i]<=27)
      {
        for(j=0;j<n[i];j++)
        { if((x[i][j]=xmin && x[i][j]<=xmax )
          && (y[i][j]=ymin && y[i][j]<=ymax))
             {drawPolygon(x[i][j],y[i][j],5,(plottype[i]-19));}
        }//end of for(j=0;
      }//end else if(plottype[i]==21..27)
}
}

 

Program 6.16 :  PlotApplet.java
 

//======================================================
// Numerical Analysis package in java
// PlotApplet class to plot 2D data
// Dr. Turhan Coban
// =====================================================
import java.io.*;
import java.applet.*;
import java.awt.*;

import java.awt.event.*;
import PlotShapes;
import Plot;

public class PlotApplet extends Applet implements ActionListener
{
  Label promptXmin; // Label prompt in Xmin field
  Label promptXmax; // Label prompt in Xmax field
  Label promptYmin; // Label prompt in Ymin field
  Label promptYmax; // Label prompt in Ymax field
  TextField inputXmin;  // input field Xmin
  TextField inputXmax;  // input field Xmax
  TextField inputYmin;  // input field Ymin
  TextField inputYmax;  // input field Ymax
  Plot p1;
  public void init() 
  { 
    //adding max-min prompts and input fields
    //label
    //xaxis
    //yaxis
    // 4 10 10 1 1
    // b.dat 22 0 0 0
    // a.dat 21 0 255 0
    // a.dat 0 0 255 0
    // b.dat 0 0 0 255
    int xnt=10;
    int ynt=10;
    int xgo=1;
    int ygo=1;
    String il=new String("label");
    String xl=new String("x axis");
    String yl=new String("y axis");
    String ifn[]=new String[4];
    ifn[0]="b.dat";
    ifn[1]="a.dat";
    ifn[2]="a.dat";
    ifn[3]="b.dat";
    int ipt[]=new int[4];
    int ib[]=new int[4];
    int ir[]=new int[4];
    int ig[]=new int[4];
    ipt[0]=22;
    ipt[1]=21;
    ipt[2]=0;
    ipt[3]=0;
    ir[0]=0;
    ig[0]=0;
    ib[0]=0;
    ir[1]=0;
    ig[1]=255;
    ib[1]=0;
    ir[2]=0;
    ig[2]=255;
    ib[2]=0;
    ir[3]=0;
    ig[3]=255;
    ib[3]=0;
    try{
       //p1=new Plot(il,xl,yl,xnt,ynt,xgo,ygo,ifn,ipt,ir,ig,ib);
       p1=new Plot();
       } catch(IOException ioe) {System.err.println("IOException in opening Plot");}
    promptXmin=new Label("Xmin ");
    inputXmin=new TextField(5);
    promptXmax=new Label("Xmax ");
    inputXmax=new TextField(5);
    promptYmin=new Label("Ymin ");
    inputYmin=new TextField(5);
    promptYmax=new Label("Ymax ");
    inputYmax=new TextField(5);
    inputXmin.addActionListener(this);
    inputXmax.addActionListener(this);
    inputYmin.addActionListener(this);
    inputYmax.addActionListener(this);
    add(promptXmin);
    add(inputXmin);
    add(promptXmax);
    add(inputXmax);
    add(promptYmin);
    add(inputYmin);
    add(promptYmax);
    add(inputYmax);
  }

  public void paint(Graphics g)
  {
    inputXmin.setText(Double.toString(p1.xmin));
    inputXmax.setText(Double.toString(p1.xmax));
    inputYmin.setText(Double.toString(p1.ymin));
    inputYmax.setText(Double.toString(p1.ymax));
    PlotShapes ps=new PlotShapes(g,p1.xabsmin,p1.yabsmin,
    p1.absheight,p1.abswidth,p1.xmin,p1.xmax,p1.ymin,p1.ymax);
    g.drawRect(p1.xabsmin,p1.yabsmin,p1.abswidth,p1.absheight);
    ps.drawXTic(p1.xntic,(p1.ymax-p1.ymin)/80.0,0);
    ps.drawYTic(p1.yntic,(p1.xmax-p1.xmin)/80.0,0);
    ps.drawXNumbers(p1.xntic);
    ps.drawYNumbers(p1.xntic);
    ps.drawLabel(p1.label);
    ps.drawXLabel(p1.xlabel);
    ps.drawYLabel(p1.ylabel);
    if(p1.xgridon!=0)
      ps.drawXGrid(p1.xntic);
    if(p1.ygridon!=0)
      ps.drawYGrid(p1.yntic);
    int i,j;
    for(i=0;i<p1.nline;i++)
    {
    //  Select plot colors
    g.setColor(new Color(p1.red[i],p1.green[i],p1.blue[i]));
    ps.drawPlotLines(i,p1.plottype,p1.x,p1.y,p1.n,p1.ch);
      }//end of for(i=0

    }//end of method

public void actionPerformed( ActionEvent e)
{
  Double valXmin=new Double(inputXmin.getText());
  p1.xmin=valXmin.doubleValue();
  Double valXmax=new Double(inputXmax.getText());
  p1.xmax=valXmax.doubleValue();
  Double valYmin=new Double(inputYmin.getText());
  p1.ymin=valYmin.doubleValue();
  Double valYmax=new Double(inputYmax.getText());
  p1.ymax=valYmax.doubleValue();
  repaint();
}

}

 

06016.JPG

Şekil 6.16 : PlotApplet.html çıktısı

 

3.   drawRect ve fillRect metotlarını kullanarak biri dolu diğeri sadece bir çizgi olan iki dikdörtgen çiz.

 

1.        Oval ve fillOval metotlarını kullanarak biri dolu diğeri sadece bir çizgi olan iki daire çiz.

2.        Paint2D metodlarından yararlanarak biri dolu diğeri sadece bir çizgi olan iki eşkenar dörtgen çizdir.

 

3.        resim.java sınıfında çizilen resmi iki kat büyüklüğnde çizdir.

 

Program 6.17 resim1.java

 

import java.applet.Applet;
import java.awt.*;

public class resim1 extends Applet
{
private Image bebek;

public void init()
{
bebek=getImage(getDocumentBase(),"turhan.gif");
}

public void paint(Graphics g)
{
g.drawImage(bebek,1,1,this);
}
}

 

4.        drawPolygon ve fillPolygon metotlarını kullanarak biri dolu diğeri sadece bir çizgi olan iki eşkenar üçgen çiz.

 

5.        Türkçe renkleri tanımlıyan renk sınıfını yaz ( renk.java).

Program 6.18 . renk.java, türkçe renk tanımı sınıfı

 

import java.io.*;
import java.awt.*;
import java.applet.Applet;

public class renk extends Color
{
  public final static renk kirmizi=new renk(255,0,0);
  public final static renk mavi=new renk(0,0,255);
  public final static renk siyah=new renk(0,0,0);
  public final static renk camgobegi=new renk(0,255,255);
  public final static renk koyugri=new renk(64,64,64);
  public final static renk gri=new renk(128,138,128);
  public final static renk yesil=new renk(0,255,0);
  public final static renk acikgri=new renk(192,192,192);
  public final static renk mor=new renk(255,0,255);
  public final static renk portakal=new renk(255,200,0);
  public final static renk pembe=new renk(255,175,175);
  public final static renk beyaz=new renk(255,255,255);
  public final static renk sari=new renk(255,255,0);
  public final static renk acikmavi=new renk(150,206,237);
  public final static renk lacivert=new renk(0,0,128);
  //burada kendi yeni renginizi tanımlayabilirsiniz.

  public renk(float kirmizi,float yesil, float mavi)
  {
  super(kirmizi,yesil,mavi);
  }

  public renk(double kirmizi,double yesil, double mavi)
  {
  super((float)kirmizi,(float)yesil,(float)mavi);
  }

  public renk(int kirmizi,int yesil, int mavi)
  {
  super(kirmizi,yesil,mavi);
  }

  public renk(int RGB)
  {
  super(RGB);
  }

  public renk(renk r)
  {
  super(r.getKirmizi(),r.getYesil(),r.getMavi());
  }

  public int getKirmizi()
  {
  return getRed();
  }

  public int getYesil()
  {
  return getGreen();
  }

  public int getMavi()
  {
  return getBlue();
  }

  public int getKYM()
  {
  return getRGB();
  }

  public String toString()
  {
  return "renk[ kirmizi "+getKirmizi()+" mavi "+getMavi()+" yesil "+getYesil()+"]";
  }

 //metotlar
 //static int HSBtoRGB(float hue,float saturation,float brightness)
 //getRed(),getGreen(),getBlue(),getRGB()
}

 

6.        Problem 5.10 da verilen Polar.java, yildiz.java ve yildizCiz.java programlarını inceleyiniz.

 

Problem 6.19 : Yildiz.java

 

import java.io.*;

import java.awt.*;

import java.applet.Applet;

import polar;

 

public class yildiz

{

 

public static void drawYildiz1(Graphics g,int xi,int yi, int n,int yildizboyu,double aci )

{

   // bu yıldız cizime teta=pi/2+aci radyandan baslar

   double teta=2.0*Math.PI/n;

   double R=yildizboyu;

   double r=yildizboyu*0.25;

   polar P1=new polar();

   polar P2=new polar();

   polar P3=new polar();

   for(int i=0;i<n;i++)

   {

     double teta1=teta*i+Math.PI/2.0+aci;

     double teta2=teta/2+teta1;

     P1.polarGir(R,teta1);

     P2.polarGir(r,teta2);

     g.drawLine((xi+(int)P1.xi()),(yi-(int)P1.xj()),

                (xi+(int)P2.xi()),(yi-(int)P2.xj()));

     double teta3=teta*(i+1)+Math.PI/2.0+aci;

     P3.polarGir(R,teta3);

     g.drawLine((xi+(int)P2.xi()),(yi-(int)P2.xj()),

                (xi+(int)P3.xi()),(yi-(int)P3.xj()));

     g.drawLine(xi,yi,

                (xi+(int)P1.xi()),(yi-(int)P1.xj()));

     g.drawLine(xi,yi,

                (xi+(int)P2.xi()),(yi-(int)P2.xj()));

   }

 

}  //drawYildiz1 metodu sonu

 

public static void drawYildiz1(Graphics g,int xi,int yi, int n,int yildizboyu )

{

   drawYildiz1(g,xi,yi,n,yildizboyu,0);

}  //drawYildiz1 metodu sonu

 

public static void drawYildiz(Graphics g,int xi,int yi, int n,int yildizboyu,double aci )

{

   // bu y�ld�z cizime teta=pi/2+aci radyandan baslar

   double teta=2.0*Math.PI/n;

   double R=yildizboyu;

   double r=yildizboyu*0.25;

   polar P1=new polar();

   polar P2=new polar();

   polar P3=new polar();

   int x[]=new int[2*n+2];

   int y[]=new int[2*n+2];

   for(int i=0;i<=n;i++)

   {

     double teta1=teta*i+Math.PI/2.0+aci;

     double teta2=teta/2.0+teta1;

     P1.polarGir(R,teta1);

     P2.polarGir(r,teta2);

     x[2*i]=xi+(int)P1.xi();

     y[2*i]=yi-(int)P1.xj();

     x[2*i+1]=xi+(int)P2.xi();

     y[2*i+1]=yi-(int)P2.xj();

     if(i==n)

     {

     x[2*i]=x[0];

     y[2*i]=y[0];    

     }

   }

   g.drawPolygon(x,y,(2*n+2));

 

}  //drawYildiz1 metodu sonu

 

 

public static void fillYildiz(Graphics g,int xi,int yi, int n,int yildizboyu,double aci )

{

   // bu y�ld�z cizime teta=pi/2+aci radyandan baslar

   // yild�zin i‡ini boyar

   double teta=2.0*Math.PI/n;

   double R=yildizboyu;

   double r=yildizboyu*0.25;

   polar P1=new polar();

   polar P2=new polar();

   polar P3=new polar();

   int x[]=new int[2*n+2];

   int y[]=new int[2*n+2];

   for(int i=0;i<=n;i++)

   {

     double teta1=teta*i+Math.PI/2.0+aci;

     double teta2=teta/2.0+teta1;

     P1.polarGir(R,teta1);

     P2.polarGir(r,teta2);

     x[2*i]=xi+(int)P1.xi();

     y[2*i]=yi-(int)P1.xj();

     x[2*i+1]=xi+(int)P2.xi();

     y[2*i+1]=yi-(int)P2.xj();

     if(i==n)

     {

     x[2*i]=x[0];

     y[2*i]=y[0];    

     }

   }

   g.fillPolygon(x,y,(2*n+2));

 

}  //fillYildiz metodu sonu

 

public static void fillYildiz1(Graphics g,int xi,int yi, int n,int yildizboyu,double aci )

{

   // bu y�ld�z cizime teta=pi/2+aci radyandan baslar

   // yild�zin i‡ini boyar

   double teta=2.0*Math.PI/n;

   double R=yildizboyu;

   double r=yildizboyu*0.25;

   polar P1=new polar();

   polar P2=new polar();

   polar P3=new polar();

   int x[]=new int[2*n+2];

   int y[]=new int[2*n+2];

   for(int i=0;i<=n;i++)

   {

     double teta1=teta*i+Math.PI/2.0+aci;

     double teta2=teta/2.0+teta1;

     P1.polarGir(R,teta1);

     P2.polarGir(r,teta2);

     x[2*i]=xi+(int)P1.xi();

     y[2*i]=yi-(int)P1.xj();

     x[2*i+1]=xi+(int)P2.xi();

     y[2*i+1]=yi-(int)P2.xj();

     if(i==n)

     {

     x[2*i]=x[0];

     y[2*i]=y[0];    

     }

   }

   g.fillPolygon(x,y,(2*n+2));

 

}  //fillYildiz metodu sonu

}

 

Program 6.20 : YıldızCiz.java

 

import java.applet.Applet;

import java.awt.*;

import yildiz;

import renk;

 

public class yildizCiz extends Applet

{

public void paint(Graphics g)

{

  //g.setColor(Color.yellow);

  g.setColor(renk.sari);

  setBackground(renk.mavi);

  yildiz.fillYildiz(g,100,100,3,100,0);

  g.setColor(renk.siyah);

  yildiz.drawYildiz1(g,100,100,3,100,0);

}

}

 

10.  yildizCiz1.java programını inceleyiniz.

 

Program 6.21 YildizCiz1.java

 

import java.applet.Applet;

import java.awt.*;

import yildiz;

 

public class yildizCiz1 extends Applet

{

public void paint(Graphics g)

{

  double aci=0;

  for(long j=0;j<5000;j++)

  {

  g.setColor(Color.black);

  yildiz.drawYildiz(g,100,100,3,100,aci);

  for(long i=0;i<10000;i++) {};

  g.setColor(Color.white);

  yildiz.drawYildiz(g,100,100,3,100,aci);

  aci+=.001;

  }

  g.setColor(Color.black);

  yildiz.drawYildiz(g,100,100,3,100,0);

}

}

 

7.        Program 6.18 de verilen renk sınıfını test eden renkTest.java programını inceleyiniz. Ve applet çıktısını çalıştırınız.

 

Program 6.21 renkTest.java

 

import java.awt.*;

import java.applet.Applet;

import renk;

 

public class RenkTest extends Applet

 {

 private int kirmizi,yesil,mavi;

 

  public void init()

 {

 kirmizi=150;

 yesil=255;

 mavi=125;

 // arka palan�n rengi mavi olarak veriliyor

 setBackground(renk.mavi);

 }

 

 public void paint(Graphics g)

 {

 // yazının rengi 100,255,125 olarak alındı

 

 g.setColor(new renk(kirmizi,yesil,mavi));

 g.drawString("ABCDEFGHIJKLMNOPQRSTUVWXYZ",50,33);

 showStatus("Su andaki arkaplan rengi : "+getBackground());

 }

 

06017

Şekil 6.17 RenkTest.html appletinin görünümü

 

11.  H6O2

polar.java, yildiz.java, yildizCiz.java programlarinin inceleyiniz. aynı programlama prensiplerini kullanarak n eşkenar kenarlı çokken çizecek eskenarcokgen.java sınıfını yaratınız. Bu sinif

public static void drawEskenarCokgen(Graphics g,int xi,int yi, int n,int esgenarcokkencapi,double aci )
public static void fillEskenarCokgen(Graphics g,int xi,int yi, int n,int yildizboyu,double aci )

metotlarini kullanarak eskenar cokgen çizsin ve icini boyasin.

not xi,yi : çokken merkezinin koordinatları
    n     : çokken köşe sayısı
eskenarcokkencapi: çokken merkezinden cokken köşesine olan mesafe
aci : 90 derece açı çokkenin başlama açısı olarak tanımlanmıştır. bu açıdan sapış radyan olarak.

 

Program 6.22 eskenarcokgen.java

 

import java.io.*;

import java.awt.*;

import java.applet.Applet;

import polar;

 

public class eskenarcokgen

{

 

public static void drawEskenarcokgen(Graphics g,int xi,int yi, int n,int eskenarcokgenboyu,double aci )

{

 

   // xi,yi eskenar cokgen merkez koordinatlari

   // n : eskenar dortgen kose sayisi

   // eskenarcokkenboyu : eskenar cokgen merkezinden

   // kenarina olan mesafe

   // bu eskenarcokken cizime teta=pi/2+aci radyandan baslar

 

   double teta=2.0*Math.PI/n;

   double R=eskenarcokgenboyu;

   polar P1=new polar();

   int x[]=new int[2*n+2];

   int y[]=new int[2*n+2];

   for(int i=0;i<=n;i++)

   {

     double teta1=teta*i+Math.PI/2.0+aci;

     P1.polarGir(R,teta1);

     x[i]=xi+(int)P1.xi();

     y[i]=yi-(int)P1.xj();

     if(i==n)

     {

     x[i]=x[0];

     y[i]=y[0];    

     }

   }

   g.drawPolygon(x,y,(n+1));

 

}  //draweskenarcokgen metotu sonu

 

public static void fillEskenarcokgen(Graphics g,int xi,int yi, int n,int eskenarcokgenboyu,double aci )

{

   // bu eskenarcokgen cizime teta=pi/2+aci radyandan baslar

   double teta=2.0*Math.PI/n;

   double R=eskenarcokgenboyu;

   polar P1=new polar();

   int x[]=new int[2*n+2];

   int y[]=new int[2*n+2];

   for(int i=0;i<=n;i++)

   {

     double teta1=teta*i+Math.PI/2.0+aci;

     P1.polarGir(R,teta1);

     x[i]=xi+(int)P1.xi();

     y[i]=yi-(int)P1.xj();

     if(i==n)

     {

     x[i]=x[0];

     y[i]=y[0];    

     }

   }

   g.fillPolygon(x,y,(n+1));

 

}  //filleskenarcokgen metotu sonu

}

 

 

8.        eskenarcokgen  sınıfını test etmek amacıyla bir applet programı yazınız ve ekrana beşken çizdiriniz.

 

9.        eskenarcokgen  sınıfını test etmek amacıyla bir JFrame programı yazınız ve ekrana üçken çizdiriniz.

 

13.

H6O3
grafik sınıfındaki:
public abstract void drawRect(int x1,int y1, int en,int yükseklik)
metotundan yararlanarak H6O3 sinifinda

public static void drawAciliDortgen(Graphics g, int x1,int y1, int en,int yükseklik,double aci)

metotunu yaziniz. Bu metot dikdortgeni verilen açi kadar bir açıyla cizdirsin.

x1,y1 : dörtgenin sağ üst köşe koordinatları
en,yükseklik : dörtgenin eni ve yüksekliği
aci: dörgenin radyan cinsinden x1,y1 noktası etrafında dönme miktarı.
not :polar sınıfı ve drawPolygon metotlarından yararlanabilirsiniz.

 

Program 6.23 açılı dikdortgen çizdiren dikdortgen sınıfı

 

İmport java.io.*;

import java.awt.*;

import java.applet.Applet;

import polar;

 

public class dikdortgen

{

 

public static void drawdikdortgen(Graphics g,int xi,int yi,int en,int boy,double aci )

{

   double R=boy;

   double r=en;

 

   polar P1=new polar();

   polar P2=new polar();

   polar P3=new polar();

   polar P4=new polar();  

 

   int x[]=new int[5];

   int y[]=new int[5];

 

   int k=0;

     //P1.polarGir(R,teta1);

     x[0]=xi;

     y[0]=yi;

    

     double teta1=aci;  

    

     P2.polarGir(r,teta1);   

     x[1]=x[0]+(int)P2.xi();

     y[1]=y[0]-(int)P2.xj();

 

     teta1+=Math.PI/2;  

     P3.polarGir(R,teta1);   

     x[2]=x[1]+(int)P3.xi();

     y[2]=y[1]-(int)P3.xj();

 

     teta1+=Math.PI/2;

     P4.polarGir(r,teta1);   

     x[3]=x[2]+(int)P4.xi();

     y[3]=y[2]-(int)P4.xj();  

   

x[4]=xi;

y[4]=yi;

g.drawPolygon(x,y,4);

 

   }

 

public static void filldikdortgen(Graphics g,int xi,int yi,int en,int boy,double aci )

{

  

 

   double R=boy;

   double r=en;

 

   polar P1=new polar();

   polar P2=new polar();

   polar P3=new polar();

   polar P4=new polar();  

 

   int x[]=new int[5];

   int y[]=new int[5];

 

   int k=0;

 

     x[0]=xi;

     y[0]=yi;

    

     double teta1=aci;  

    

     P2.polarGir(r,teta1);   

     x[1]=x[0]+(int)P2.xi();

     y[1]=y[0]-(int)P2.xj();

 

     teta1+=Math.PI/2;  

     P3.polarGir(R,teta1);   

     x[2]=x[1]+(int)P3.xi();

     y[2]=y[1]-(int)P3.xj();

 

     teta1+=Math.PI/2;

     P4.polarGir(r,teta1);   

     x[3]=x[2]+(int)P4.xi();

     y[3]=y[2]-(int)P4.xj();  

   

x[4]=xi;

y[4]=yi;

g.fillPolygon(x,y,4);

 

   }

}

Program 6.24 : dikdortgen sınıfını kullanan H6O2.java programı

 

import java.applet.Applet;

import java.awt.*;

import java.awt.event.*;  

import dikdortgen;

import renk;

 

public class H6O2 extends Applet implements ActionListener

{

   int en,boy,xi1,yi1,yaricap1;

   double aci1;

   renk renk; //sinifin adi renk, nesne adi renk

            

   Label kutu1;

   Label kutu2;

   Label kutu3;

   Label kutu4;

   Label kutu5;

 

   Label bos1;

   Label bos2;

   Label bos3;

   Label renk1;

   Label kirmizi;

   Label mavi;

   Label yesil;

 

   TextField kutugir1;

   TextField kutugir2;

   TextField kutugir3;

   TextField kutugir4;

   TextField kutugir5;

   TextField kutukirmizi;

   TextField kutumavi;

   TextField kutuyesil;

 

 

public void init(){

 

  //not : init metotunda t�m de§iŸkenlerin ilk de§erleri verilmelidir.

  Panel p=new Panel();

  p.setLayout(new GridLayout(5,4));

  //5*4 tablo p paneli haz�rland�

  kutu1=new Label("xi noktasini giriniz     :");

  p.add(kutu1);

  kutugir1=new TextField(3);

  p.add(kutugir1);

 

  kutu2=new Label("yi noktasini giriniz     :"); 

  p.add(kutu2);

  kutugir2=new TextField(3);

  p.add(kutugir2);

 

  kutu3=new Label("eni giriniz              :"); 

  p.add(kutu3);

  kutugir3=new TextField(3);

  p.add(kutugir3);

 

  kutu4=new Label("yuksekligi giriniz       :"); 

  p.add(kutu4);

  kutugir4=new TextField(3);

  p.add(kutugir4);

 

  kutu5=new Label("aciyi giriniz (derece)   :"); 

  p.add(kutu5);

  kutugir5=new TextField(3);

  p.add(kutugir5);

 

  bos1=new Label(" ");

  bos2=new Label(" ");

  bos3=new Label(" ");

 

  renk1=new Label("renk");

  kirmizi=new Label("kirmizi");

  mavi=new Label("mavi");

  yesil=new Label("yesil");

  kutukirmizi=new TextField(4);

  kutumavi=new TextField(4);

  kutuyesil=new TextField(4);

 

  xi1=300;

  yi1=300;

  en=150;

  boy=100;

  yaricap1=(int)Math.sqrt(100*100+150*150);

  aci1=0;

  kutugir1.setText(""+xi1);

  kutugir2.setText(""+yi1);

  kutugir3.setText(""+en);

  kutugir4.setText(""+boy);

  kutugir5.setText(""+aci1);

  kutukirmizi.setText("255");

  kutumavi.setText("200");

  kutuyesil.setText("0");

  renk=new renk(255,200,0);

  p.add(bos1);

  p.add(bos2);

  p.add(bos3);

  p.add(kirmizi);

  p.add(yesil);

  p.add(mavi);

  p.add(renk1);

  p.add(kutukirmizi);

  p.add(kutumavi);

  p.add(kutuyesil);   

  //elemanlar p paneline p paneli de aplete eklendi

  add(p,BorderLayout.NORTH);

 

  kutukirmizi.addActionListener(this);

  kutumavi.addActionListener(this);

  kutuyesil.addActionListener(this);

  kutugir1.addActionListener(this);

  kutugir2.addActionListener(this);

  kutugir3.addActionListener(this);

  kutugir4.addActionListener(this);

  kutugir5.addActionListener(this);

 

}

 

 

public void actionPerformed(ActionEvent e)

 

{

  Integer xi1i=new Integer(kutugir1.getText());

  xi1=xi1i.intValue();

  Integer yi1i=new Integer(kutugir2.getText());

  yi1=yi1i.intValue();

  Integer eni=new Integer(kutugir3.getText());

  en=eni.intValue();

  Integer boyi=new Integer(kutugir4.getText());

  boy=boyi.intValue();

  Double aci1i=new Double(kutugir5.getText());

  aci1=aci1i.doubleValue();

  Integer Kirmizii=new Integer(kutukirmizi.getText());

  int kirmizi1=Kirmizii.intValue();

  Integer Mavii=new Integer(kutumavi.getText());

  int mavi1=Mavii.intValue();

  Integer Yesili=new Integer(kutuyesil.getText());

  int yesil1=Yesili.intValue();

  renk=new renk(kirmizi1,mavi1,yesil1);

  repaint();

 

}

 

 

public void paint(Graphics g)

{   

g.setColor(renk);

dikdortgen.filldikdortgen(g,xi1,yi1,en,boy,(aci1/180.0*Math.PI));

g.setColor(renk.siyah);

dikdortgen.drawdikdortgen(g,xi1,yi1,en,boy,(aci1/180.0*Math.PI));

}

}

 

 

 


  << index       < bölüm 5     > bölüm 7          bölüm başı