Uvod u programiranje

Maja Čić


Osnovni Java Aplet

Java apleti su mali programi namijenjeni izvršavanju kroz HTML stranicu u mrežnom pretraživaču. Točnije, aplet je objekt koji pripada klasi java.applet.Applet ili jednoj od podklasa te klase.

Aplet je dio grafičkog sučelja, prikazuje se u prozoru (bilo mrežnog pretraživača ili nekog drugog programa), čini ga pravokutno područje u kojem su sadržani drugi elementi poput tipki ili tekstualnih polja. Može prikazivati grafičke elemente kao što su slike, pravokutnici ili linije, te može odgovarati na određene događaje (na primjer kad korisnik klikne negdje u apletu).

Klasa Applet, definirana u paketu java.applet, služi samo kao osnova za izradu podklasa. Objekt tipa Applet ima neka osnovna svojstva, ali zapravo ne radi ništa korisno, to je prazno područje na ekranu koje ne odgovara ni na kakve događaje. Da bi dobio upotrebljiv aplet, programer mora definirati podklasu koja nasljeđuje klasu Applet. U klasi Applet je definirano nekoliko metoda tako da ne rade baš ništa, pa programer mora nadjačati bar neke od ovih metoda i dati im neko značenje.

Apletu nije potrebna main() metoda jer on i nije samostalni program, iako više metoda u apletu podsjećaju na main() time što je zamišljeno da ih poziva sistem, a programer treba definirati odgovor na te pozive.


Jedna od metoda definiranih u Applet klasi koje ne rade ništa je paint(). Tu metodu sistem poziva kad treba nacrtati aplet. U podklasi Applet klase tu metodu se može predefinirati tako da crta razne grafičke elemente, a definicija mora biti u obliku:

         public void paint(Graphics g) {
              // nacrtaj
          } 

Parametar g tipa Graphics pridjeljuje sistem prilikom poziva paint() metode. Sva iscrtavanja u Javi izvode se pomoću metoda Graphics objekta.

Elemente grafičkog korisničkog sučelja ne iscrtava paint() metoda, oni su zasebni objekti definirani svojim klasama. Svi objekti prikazani u apletu imaju svoju paint() metodu i zaduženi su za svoje iscrtavanje.

Kao prvi primjer apleta razmotrimo aplet koji prikazuje ispis "Hello World!". Za ispisivanje teksta koristi se paint() metoda. import izraz omogućuje korištenje kratkih imena Applet i Graphics, umjesto dugih oblika zapisa java.awt.Applet i java.awt.Graphics.

         import java.awt.*;
         import java.applet.*;
         
         public class HelloWorldApplet extends Applet {
         
               public void paint(Graphics g) {
               	   g.drawString("Hello World!", 10, 30);
               }
         }  

Metoda drawString() definirana u Graphics klasi zadužena je za iscrtavanje. Parametri ove metode određuju string koji treba iscrtati i mjesto na apletu na kojem će biti prikazan.

Aplet je objekt a ne klasa, zato je potrebno iz ovako definirane klase stvoriti objekt izrazom:

         Applet hwAplet = new HelloWorldApplet();

Ovo je korisno ako se želi dodati aplet u prozor programa koji se piše, inače aplete najčešće kreira "sistem". U slučaju kad se aplet prikazuje u sklopu stranice u mrežnom pretraživaču, "sistem" znači upravo mrežni pretraživač. Pretraživač treba kreirati aplet objekt i dodati ga u stranicu. Pretraživač dobija informaciju o tome što prikazati iz izvornog koda te stranice. Da bi aplet bio prikazan u pretraživaču potrebno je da u kodu stranice budu zadani ime i veličina apleta. Primjer HTML koda koji nalaže pretraživaču da prikaže HelloWorldApplet:

      <applet code="HelloWorldApplet.class" width=200 height=50>
      </applet>

to izgleda ovako:

Sorry, but your browser
doesn't do Java.

Ukoliko vaš pretraživač podržava Javu, vidjet ćete poruku "Hello world!" ispisanu u pravokutniku širokom 200 i visokom 50 piksela.


Uzmimo za primjer aplet u kojem pozdrav mijenja boju svaki put kad korisnik stisne tipku:

Sorry, but your browser
doesn't support Java.



Tipka u ovom apletu je objekt koji pripada klasi java.awt.Button. Prilikom stvaranja apleta, potrebno je stvoriti tipku i dodati je u aplet kao dio postupka inicijalizacije apleta. Za razliku od ostalih objekata apleti ne koriste konstruktore za inicijalizaciju, umjesto toga nakon kreiranja aplet objekta poziva se init() metoda tog objekta koja je oblika:
         public void init() { . . . }

Ova metoda obavlja zadatak koji obično vrši konstruktor, tj. inicijalizira varijable instance tog apleta. Osim toga, u init() metodu se smještaju drugi dijelovi apleta.

Nakon što je postavljen u aplet, Button objekt uglavnom vodi računa sam o sebi, zapravo crta sam sebe. Kad korisnik pritisne ekransku tipku stvara jedan događaj, a aplet (ili bilo koji drugi objekt) može biti programiran tako da odgovara na ovaj događaj. Događaj koji kreira ekranska tipka zove se ActionEvent. Da bi aplet odgovorio na događaj ovog tipa mora definirati metodu

         public void actionPerformed(ActionEvent evt) { . . . } 

Osim toga, ekranska tipka mora znati da aplet čeka događaje s ekranske tipke, što se postiže pozivanjem metode instance addActionListener() u init() metodi apleta.

Što bi aplet trebao uraditi u actionPerformed() metodi? U našem primjeru trebala bi se promijeniti boja poruke u apletu. Najlakše bi bilo reći da actionPerformed() metoda nacrta poruku u novoj boji. paint() metoda apleta je pozvana u trenutku pojavljivanja apleta na ekranu, ali može biti pozvana i u bilo kojem drugom trenutku, zapravo, poziva se kad god treba ponovo nacrtati sadržaj apleta (npr. kad je aplet bio pokriven drugim prozorom pa opet otkriven, prilikom skroliranja prozora pretraživača…) i što je posebno važno, svaki put kad program to zatraži pozivom repaint() metode.

Prilikom svakog poziva paint() metoda mora biti u stanju nacrtati ispravnu sliku u apletu, u ovom slučaju ispisivanje poruke u pravoj boji. Pretpostavimo da actionPerformed() metoda jednostavno ispisuje poruku u novoj boji. paint() metoda mora nacrtati poruku u novoj boji, a kako će znati u kojoj? Jedini način da bi applet mogao nešto znati je spremiti podatke u varijable instance. Metoda actionPerformed() postavlja vrijednost te varijable instance, a paint() metoda na osnovi vrijednosti te varijable određuje boju kojom će iscrtati poruku. Zapravo, dovoljno je da actionPerformed() metoda postavi varijablu instance i pozove repaint() metodu.

Kroz ovaj primjer prikazana je init() metoda koja postavlja applet i dodaje elemente, paint() metoda koja iscrtava applet i metoda actionPerformed() za upravljanje događajima:

     import java.awt.*;        // Paket osnovnih klasa za GUI programiranje.
     import java.awt.event.*;  // Paket klasa za rad s događajima.
     import java.applet.*;     // Paket s Applet kalsom.
     
     public class ColoredHelloWorldApplet
                       extends Applet implements ActionListener {
                          
         // Ova klasa definira podklasu Applet kalse.
         // "implements ActionListener" dio kaže da objekti tipa ColoredHelloApplet
         // mogu odgovarati na ActionEvents. Ovo nam je potrebno ako želimo
         // odgovor na događaj koji generira klik mišem na ekransku tipku.
     
        int brojBoje;   // Sadrži podatak o boji koju želimo koristit
				//	za prikaz poruke;
                        //  1 za crvenu, 2 za plavu, 3 za zelenu.
                          
        Font tekstFont; // Font kojim želimo prikazat poruku.
                        // Font objekt predstavlja određen stil iscrtavanja teksta na ekran.

        
        public void init() {
     
               // Ovaj podprogram poziva sistem za inicijalizaciju apleta.
               // Postavlja font i početnu boju apleta.
               // Dodaje ekransku tipku apletu za promijenu boje pruke.
               
            setBackground(Color.yellow);
               // Postavlja se boja pozadine apleta prije nego što se
			   // pozove paint() metoda.
               // Ekranska tipka i poruka se prikazuju na žutoj pozadini.
     
            brojBoje= 1;   // Postavljena je crvena boja poruke.
            
            tekstFont = new Font("Serif",Font.BOLD,24);
               // Kreira objekt tipa Font koji predstavlja veliki zadebljani font.
     
            Button bttn = new Button("Promijeni boju");
               // Kreira novi objekt Button. "Promijeni boju" je tekst
               // koji se ispisuje na ekranskoj tipci.
 
            bttn.addActionListener(this);  
               // Postavlja bttn tako da šalje "action event" apletu
               // kada korisnik klikne na ekransku tipku.
               // Parametar this je ime za aplet objekt koji kreiramo.
                    
            add(bttn);  // Dodaje ekransku tipku apletu, tako
						// da se prikaže na ekranu
     
        }  // kraj init() metode
        
        
        public void paint(Graphics g) {
              
              // Ovj podprogram poziva sistem kada treba prikazat sadržaj apleta
              // Prikazuje poruku "Hello World" u odgovarajućoj boji i fontu.
     
           switch (brojBoje) {         // Postavi boju.
              case 1:
                 g.setColor(Color.red);
                 break;
              case 2:
                 g.setColor(Color.blue);
                 break;
              case 3:
                 g.setColor(Color.green);
                 break;
           }
           
           g.setFont(tekstFont);       // Postavi font.
           
           g.drawString("Hello World!", 20,70);    // Ispiši ovu poruku.
     
        }  // kraj paint() metode
        
     
        public void actionPerformed(ActionEvent evt) {
        
           // Ovaj potprogram poziva sistem kada korisnik klikne na ekransku tipku.
           // Reakcija je promjena vrijednosti varijable brojBoje
           // koja određuje boju poruke, i poziv repaint() metode
           // da bi se aplet iscrtao s novim vriejdnostima.
              
           if (brojBoje == 1)       // Promijeni brojBoje.
              brojBoje = 2;
           else if (brojBoje == 2)
              brojBoje = 3;
           else
              brojBoje = 1;
 
           repaint();  // Kaže sistemu da aplet treba biti ponovno iscrtan
           
        }  // kraj init() metode
        
     }  // kraj klase



[ prethodna stranica | Početak | sljedeća stranica ]