Grafika



Grafični programi so zabavni!

Pisanje programov z grafiko pomeni, da na zaslon rišemo z liki in barvami. Lahko narišemoobraz klovna ali vzorec z raznobarvnimi pravokotniki. Lahko sestavimo tudi program s kroglami, ki se odbijajo na zaslonu.

Najprej moramo nastaviti barvo. Nato narišemo lik in morda zamenjamo barvo, preden rišemo druge like. Osnovni liki so črte, pravokotniki in krogi.

Izbiranje barve

Barvo izberemo z metodo setColor, ki ima naslednjo osnovno obliko:
 

        setColor(color) ;

Nekaj barv, ki jih imamo na voljo: red orange yellow green blue purple black white.

red orange yellow green blue purple black white
               

Več o barvah, ki jih imamo na voljo, zasledimo v menuju pomoč (help) programa JUDO!

Barvo lika torej določimo tako, da z metodo setColor najprej izberemo barvo, nato pa narišemo lik. Določimo pa lahko tudi barvo ozadja:
 

     setBackgroundColor(color) ;

Poizkusi naslednji program:

   void main()    {
      setBackgroundColor(black) ;
   }

Risanje preprostih likov


Pri risanju likov moramo podati njihov položaj in velikost na zaslonu v koordinatah, oboje podajamo v pikslih.  Vse vrednosti so seveda celoštevilčne. Položaj likov je podan relativno na zgornji levi rob zaslona. 

java graphics drawing coordinates

Pravokotnik na položaju  (x,y ), podamo na naslednji način :

        drawRectangle(x , y , sirina , visina);
        

Če bi hoteli narisati kvadrat s stranico 200 na položaju (100,100), bi uporabili stavek:

        drawRectangle(100,100, 200,200);

java graphics drawing coordinates

Pa napišimo ustrezni program:

  void main()    {
     setBackgroundColor(red);
     setColor(blue);
     drawRectangle(100,100,300,150);
  }

Na zaslonu dobimo naslednje:

java graphics drawing coordinates

Poskusimo narisati krog! Namig, kako to naredimo, je naslednji. Pri tem sta x in y koordinati levo zgoraj:

 
        drawCircle( x, y, radius)

Vaja


Nariši zelen krog s polmerom 50 na položaju, ki je levo zgoraj določen z (100, 200). Kako bi to zakodiral?
Odgovor:

  void main()    {   
setColor(green);
    drawCircle(100,200,50);    }

Opazimo, da smo doslej vsem likom narisali le robove in jih nismo zapolnili. Polne like dobimo z naslednjimi metodami:

        fillRectangle(x, y, width, height);
        fillCircle(x, y, radius);
        fillOval(x, y, width, height);

Pa narišimo samoportret!

   void main()    {
       setBackgroundColor(yellow);
       // telo
       setColor(red);
       fillRectangle(100,100,50,50);
       // roke
       setColor(green);
       fillRectangle(25,100,75,10);
       fillRectangle(150, 100,75,10);
       // noge
       fillRectangle(100,150,10,75);
       fillRectangle(140,150,10,75);
       // glava
       setColor(blue);
       fillCircle(100,50,25);
   }

In tu je, kar dobimo !

java graphics drawing coordinates

Vaja

  1. Dodaj osebi oči, nos in usta. Lahko tudi čevlje. Bodi ustvarjalen...
  2. V programu JUDO pojdi na - Help - Tutorials - Graphics, preberi in ponovi primere.
  3. Oglej si opis metod za  drawLine in drawString
  4. Nariši hišo in zvezdo.
 

java graphics drawing coordinates         java graphics drawing coordinates


Metoda drawString 


drawString  nariše niz znakov na danem položaju.
Kako to naredimo, podaja naslednji vzorec, pri čemer je Besedilo, niz, ki naj bo izpisan na položaju x,y (merjeno levo spodaj pod besedilom):

 
        drawString(String , x , y );

Primer 1

         String ime = "Janez Novak";
         drawString(ime, 35, 25);
                

Primer 2

        drawString("To je besedilo", 15, 35);

Tako, sedaj pa napišimo naš logotip:

  void main()    {
     setBackgroundColor(white);
     setColor(black);
     fillRectangle(100,100,200,100);
     setColor(white);
     drawString("Java za zacetnike" , 150,120);
     setColor(red);
     drawRectangle(100,100,200,100);
  }

 

Vaje:

  1. Nariši vrsto krogov. Uporabi zanko for.  Namig: metoda :
    getDrawingHeight() vrne višino okna z risanjem
    getDrawingWidth() vrne širino okna z risanjem
    Algoritem, ki bi ga lahko uporabil, je naslednji:
 
 // deklariraj visino in sirino okna
 // deklariraj stevilo krogov v vrsti
 // ugotovi visino in sirino okna
 // deli sirino s stevilom krogov in dobis tako  radius x 2
 // Ponavljaj zanko tolikokrat, kolikor je stevilo krogov
 // vsakokrat narisi krog na polozaju stevec * radius
 // zakljuci zankoend loop

Prepiši (copy/paste) ta algoritem v urejevalnik JUDO in ga uporabljaj kot načrt svojega programa.
Vsako vrstico zapolni s primerno kodo in jo odkomentiraj.
Kako bi zapolnil celotno okno s krogi ?
Namig: uporabi zanko for znotraj zanke for. Poskusi!!
Če se pri delu  zmotiš, si kar beli glavo in na koncu boš uspelt.

  1. a. Nariši vrsto koncentričnih krogov 
          b. Nariši vrsto koncentričnih pravokotnikov.

Nekaj dodatnih napotkov

Oglej si  Graphics functions in the JUDO Functions Reference.
Oglej si  JUDO Color Values Reference.

Nekaj odgovorov

Hiša

 
void main()    {
        setBackgroundColor(black);
        setColor(white);
        // front
        fillRectangle(100,100,300,100);
        // roof
        drawLine(100,100,250,25);
        drawLine(250,25,400,100);
        // windows
        setColor(blue);
        fillRectangle(125,125,20,20);
        fillRectangle(355,125,20,20);
        // door
        setColor(red);
        fillRectangle(240,150, 30,50);
 
}

Vrsta krogov

 
void main()    {
   // deklaracija sirine in visine okna
   int width;
   int height;
   int premer;  // deklaracija premera in polmera krogov
int polmer;
   // deklaracija stevila krogov v vrsti
   int cnum = 20;
 
   // ugotovi sirino okna
   width = getDrawingWidth();
 
   // deli sirino s stevilom krogov in dobis tako premer (radius x 2)
   premer = width/cnum;
polmer = premer/2;
   // Ponavljaj zanko tolikokrat, kolikor je stevilo krogov
   for(int stevec = 0; stevec < cnum ; stevec++)
   {
      // narisi krog na polozaju stevec * radius
      setColor(red);
      fillCircle(stevec*premer,0,premer/2);
   //konec zanke
   }
}