Boja
Java koristi 24-bitni prostor boja, gde je svaka boja određena kombinacijom crvene, zelene i plave (RGB model). Svaka od ovih komponenti može da ima vrednost u rasponu od 0 do 255. Za rad sa bojama u Javi se koristi klasa Color.
Na primer, naredba
Color c = new Color (140, 140, 140);
kreiraće objekat koji odgovara tamno sivoj boji. Za neke od uobičajenih boja definisane su konstante unutar klase Color. Neke od njih su Color.BLACK, Color.WHITE, Color.BLUE, Color.RED i dr.
Kada jednom kreirate objekat boje, neophodno je da ga dodelite apletu pomoću metoda setForeground() i setBackground(). Ovi metodi se odnose na ceo aplet. Sem njih, postoji i metod setColor() klase Graphics, koji postavlja boju koja će biti korišćena za iscrtavanje. Pogledajte sledeći primer:
g.setColor(Color.WHITE); // sve što bude nacrtano biće belo
g.drawRect(10,10,300,200); // iscrtava beli pravougaonik
setBackground(Color.BLUE); // boja pozadine je plava
Kod koji sledi predstavlja aplet koji popunjava prostor koji mu je dodeljen kvadratima obojenim slučajno generisanim bojama. Napisan je tako da se prilagođava bilo kojoj veličini apleta.
2:import java.awt.Color;
3: public class ColorBoxes extends java.applet.Applet {
4: public void paint(Graphics g) {
5: int rval, gval, bval;
6: for (int j = 30; j < (size().height -25); j += 30)
7: for (int i = 5; i < (size().width -25); i += 30) {
8: rval = (int)Math.floor(Math.random() * 256);
9: gval = (int)Math.floor(Math.random() * 256);
10: bval = (int)Math.floor(Math.random() * 256);
11: g.setColor(new Color(rval,gval,bval));
12: g.fillRect(i, j, 25, 25);
13: g.setColor(Color.black);
14: g.drawRect(i-1, j-1, 25, 25);
15: }
16: }
17:}
Obzirom da se paint() metod poziva svaki put prilikom iscrtavanja apleta, pa i u situaciji kada se prozor browser-a pomera, boje kvadrata će se svaki put ponovo generisati.
Slike
Klasa Image paketa java.awt obezbeđuje apstraktne metode za rad sa slikama. Ova klasa se kombinuje sa metodima klasa Applet i Graphics kako bi slike bile učitane i prikazane.
Učitavanje slike
Metod getImage() klase Applet učitava sliku i automatski kreira objekat klase Image koji odgovara toj slici. Moguće su dve vrste poziva ovog metoda.
Image slika = getImage(new URL(http://nekiserver.com/slike/slika.gif));
ili
Image slika = getImage(getCodeBase(), "slike/slika.gif");
Drugi poziv metoda getImage() sadrži dva argumenta. Prvi je osnovna putanja, a drugi putanja do slike relativna u odnosu na osnovnu. U prethodnom primeru za osnovnu putanju je korišćena putanja do direktorijuma u kome se nalazi sam aplet. Ovakvo pozivanje metoda getImage() omogućava da premeštate fajlove (aplet i sliku) bez potrebe za menjanjem samog koda.
Prikazivanje slike
Kada ste jednom učitali sliku u objekat klase Image, potrebno je i da je prikažete. To ćete postići korišćenjem metoda drawImage() klase Graphics.
g.drawImage(slika, 10, 10, this) - prikazuje sliku originalnih dimenzija sa gornjim levim uglom (10,10)
g.drawImage(slika, 10, 10, 100, 75, this) – prikazuje sliku počevši od gornjeg levog ugla (10, 10) unutar pravougaonika dimenzija 100x75; ukoliko je slika različitih dimenzija od 100x75 biće povećana ili smanjena tako da se uklopi u ovaj pravougaonik
Prilikom pozivanja drugog metoda, može doči do deformacije slike. Zbog toga se obično koriste metodi getHeight() i getWidth() kako bi se dobila informacija o veličini slike, a zatim se ove vrednosti koriste za proporcionalno smanjenje ili povećanje slike.
int sirina = slika.getWidth(this);
int visina = slika.getHeight(this);
g.drawImage(slika, 10, 10, sirina/4, visina/4, this);
Zvuk
Java podržava nekoliko formata audio fajlova: AIFF, AU, WAV, MIDI i RMF. Najjednostavniji način da neki od audio fajlova uključite u vaš aplet jeste pomoću metoda play() klase Applet. Ovaj metod preuzima audio fajl na sličan način kao što je metod getImage() preuzimao slike. Na primer,
play(getCodeBase(), "pesma.wav");
Ovako pozvan metod učitava zadati fajl i pušta ga čim je to moguće. Ukoliko fajl nije pronađen, ne proizvodi se informacija o grešci.
Ukoliko želite da neki audio fajl pustite nekoliko puta, morate prvo da ga učitate u objekat klase AudioClip pomoću metoda getAudioClip. Klasa AudioClip je deo paketa java.applet. Metod getAudioClip() možete da koristite samo u okviru apleta. Ako želite da koristite zvuk unutar aplikacije, umesto ovog koristite metod newAudioClip().
Klasa AudioClip ima metode play(), stop() i loop() pomoću kojih možete da kontrolišete puštanje audio zapisa.
Ukoliko metodi getAUdioClip() i newAudioClip() ne mogu da pronađu zadati fajl, objektu tipa AudioClip biće dodeljena vrednost null. Pokušaj poziva metoda play() nad objektom null dovodi do greške.
Kada ste jednom učitali i pustili neki audio zapis on će se izvršavati sve dok traje, bez obzira da li se tekući aplet u okviru koga ste pustili taj zapis završio ili ne. Ovo može da dovede do toga da se učitani audio zapis i dalje čuje, čak iako je korisnik napustio stranu sa vašim apletom i prešao na neku drugu. Zbog toga treba koristiti metod stop(), obično u okviru metoda destroy() celog apleta ili stop(), kako bi se zvuk zaustavio prilikom zatvaranja apleta.
1: import java.awt.Graphics;
2: import java.applet.AudioClip;
3: public class AudioLoop extends java.applet.Applet implements Runnable {
4: AudioClip bgZvuk;
5: AudioClip voz;
6: Thread runner;
7: public void start() {
8: if (runner == null) {
9: runner = new Thread(this);
10: runner.start();
11: }
12: }
13: public void stop() {
14: if (runner != null) {
15: if (bgZvuk != null)
16: bgZvuk.stop();
17: runner = null;
18: }
19: }
20: public void init() {
21: bgZvuk = getAudioClip(getCodeBase(),"spacemusic.au");
22: voz = getAudioClip(getCodeBase(), "train.au");
23: }
24: public void run() {
25: if (bgZvuk != null)
26: bgZvuk.loop();
27: Thread thisThread = Thread.currentThread();
28: while (runner == thisThread) {
29: try {
30: Thread.sleep(5000);
31: } catch (InterruptedException e) { }
32: if (voz != null)
33: voz.play();
34: }
35: }
36: public void paint(Graphics screen) {
37: screen.drawString("Igramo se sa zvucima ...", 10, 10);
38: }
39: }
Da biste testirali prethodni program, kreirajte HTML stranu sa apletom veličine 200x100. Audio fajlovi spacemusic.au i train.au treba da budu smešteni u istom direktorijumu gde se nalazi i web strana.
Metod init() u linijama 20 – 23 pokušava da učita audio fajlove u objekte klase AudioClip. U okviru ovog metoda se ne vrši provera da li su fajlovi zaista i učitani. Ovo testiranje se vrši kasnije, u okviru metoda run().
Takođe, u metodu stop() se zaustavlja puštanje fajla bgZvuk, ukoliko je završena nit u okviru koje se ovaj fajl izvršava.