Javalla voi tehdä joko sovelluksia tai sovelmia (applet). Sovellus käynnistetään komentoriviltä itsenäisenä ohjelmana. Sovelma toimii www-sivulla yhtenä komponenttina. Tutkimme tässä, miten sovellus ja sovelma tehdään.
Varsinainen tietokoneohjelman toiminta toteutetaan lauseiden ja muuttujien avulla. Nämä tarvitsevat kuitenkin ympärilleen sellaisen kokonaisuuden, joka on mahdollista suorittaa jossakin ympäristössä, näitä ovat sovellukset ja sovelmat.
Sovellusten ja sovelmien tekemistä varten tarvitset J2SE-kehitysympäristön. Jos käyttämässäsi koneessa ei vielä ole sitä, voit hakea sen Sunin Java-sivuilta.
Java sovellus koostuu ainakin yhdestä luokasta. Luokka on ohjelmistokomponentti, joka esittää yhtä kokonaisen sovelluksen osaa eli oliota. Luokka sisältää olion ominaisuudet ja toiminnot. Tässä käsittelemme luokkia mahdollisimman kevyesti. Teemme sovelluksia, joissa on vain yksi luokka ja aluksi vain yksi toiminto (eli funktio).
Luokka (ja siis myös sovellus) kirjoitetaan Java-koodina tekstitiedostoon. Esimerkkinä on klassinen sovellus, joka tulostaa komentoriville "Hello world!".
1:class Hello 2:{ 3: // pääohjelma, eli ensimmäisenä suoritettava funktio 4: public static void main(String[] args) 5: { 6: // tästä alkavat ohjelman lauseet 7: System.out.println("Hello world!"); 8: // tähän loppuvat ohjelman lauseet 9: } 10:}
Koodiin on lisätty rivinumerot (harmaalla värillä rivin alussa).
Niitä ei kirjoiteta varsinaiseen koodiin.
Kommentit, jotka eivät kuulu varsinaiseen suoritettavaan koodiin,
merkitään alkavaksi merkeillä //. Tämä jälkeen tuleva rivin
loppu on kommentti.
Java-koodi talletetaan tiedostoon, jonka nimi on oltava "Hello.java", koska luokan nimeksi on koodissa määritelty "Hello".
Kirjoittamisen jälkeen koodi on käännettävä. Käytämme tässä Sunin javac-kääntäjää komentorivillä. Annamme komennon (lihavoitu)
C:\java> javac Hello.java C:\java>
Tämän jälkeen suoritamme sovelluksen Java-virtuaalikoneen (java) avulla:
C:\java> java Hello Hello world! C:\java>
Ohjelman lauseet tulevat funktion main sisälle. Edellisessä esimerkissä
on osoitettu kommenteilla lauseiden paikka.
Lauseet erotellaan toisistaan puolipisteen avulla. Jokainen yksinkertainen
lause lopetetaan puolipisteeseen. Monimutkaisemmissa lauseissa käytetään
lohkoa { ... }.
Lauseista kerrotaan enemmän toisaalla oppimateriaalissa. Tässä käytämme vain tulostuslauseita.
Edellisessä esimerkissä tulostettiin terminaaliin (komentoriville, päätteelle)
rivi tekstiä. Tulostaminen tapahtuu lauseilla System.out.print()
ja System.out.println(),
jossa sulkujen sisällä annetaan tulostettava merkkijono, esimerkiksi
System.out.println("Hello world!");
Funktio System.out.println() vaihtaa riviä tulostettavan
merkkijonon jälkeen. Funktio System.out.print() jää samalle
riville.
Merkkijono kirjoitetaan lainausmerkkien sisälle. Merkkijonoista saat lisätietoja myöhemmästä oppimateriaalista.
C:\java> java Kolme Tämä on ensimmäinen rivi! Tämä on toinen rivi! Tämä on kolmas rivi! C:\java>
Tietojen syötön toteuttaminen edellyttää lisätietoja muuttujista ja taulukoista.
Yksinkertaisin tapa syöttää tietoja ohjelmalle on lisätä niitä komentoriville ohjelman nimen perään, esimerkiksi
C:\java> java Hello2 Jarkko Hello, Jarkko! C:\java>
Edellinen ohjelma "Hello" ei kuitenkaan osaa käsitellä tietoja tuolla tavalla. Kirjoitamme muutetun version, jonka toiminta vastaa yllä olevaa esimerkkiä.
1:class Hello2 2:{ 3: // pääohjelma, eli ensimmäisenä suoritettava funktio 4: public static void main(String[] args) 5: { 6: // tästä alkavat ohjelman lauseet 7: System.out.print("Hello, "); 8: System.out.print(args[0]); 9: System.out.println("!"); 10: // tähän loppuvat ohjelman lauseet 11: } 12:}
Käännämme ja ajamme ohjelman komentorivillä:
C:\java> javac Hello2.java C:\java> java Hello2 Jarkko Hello, Jarkko! C:\java>
Komentorivillä annetut parametrit voidaan ottaa käyttöön taulukosta
args muodossa args[0], args[1],
args[2], ...
Kannattaa olla kuitenkin tarkkana parametrien kanssa. Jos parametria ei anneta komentorivillä, seuraa inhottava virheilmoitus:
C:\java> java Hello2
Hello, Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
at Hello2.main(Hello2.java:8)
C:\java>
Virheet voi estää helposti tutkimalla taulukon args pituutta. Se on kuitenkin myöhemmän oppimateriaalin asia.
C:\java> java Henkilo Jarkko Leponiemi 35 Etunimi: Jarkko Sukunimi: Leponiemi Ikä: 35 C:\java>
Java-sovelma (applet) on komponentti, joka toimii HTML-sivun elementtinä. Sovelmia voidaan käyttää toteuttamaan sellaisia vuorovaikutteisia elementtejä, joiden tekeminen ei ole mahdollista tavallisen HTML-merkkauksen ja skriptikielien kuten Javascriptin avulla. Sovelma ottaa sivulta käyttöönsä suorakulmion muotoisen alueen, jonka sisällön se piirtää kokonaan itse.
Sovelmakin toteutetaan Java-luokkana. Luokan muoto ei kuitenkaan ole samanlainen kuin Java-sovelluksessa. Esimerkkinä on sovelma, joka piirtää käyttöönsä saamalleen alueelle ympyrän. Alla oleva koodi on kirjoitettu tiedostoon "YmpyraSovelma.java".
1:import java.awt.*; 2:import java.applet.*; 3: 4:public class YmpyraSovelma extends Applet 5:{ 6: 7: // tämä funktio piirtää sovelman sisäosan 8: public void paint(Graphics g) 9: { 10: // tästä alkavat sovelman sisäosan piirtävät lauseet 11: g.drawOval(10, 10, 100, 100); 12: // tähän loppuvat piirtävät lauseet 13: } 14: 15:}
Sovelman koodissa voisi olla muitakin osia, mutta tässä teemme vain sellaisia sovelmia, jotka ainoastaan piirtävät jotakin näkyville. Siksi tarvitsemme vain yhden funktion paint, jonka sisälle kirjoitetaan piirtämiseen tarvittavat lauseet.
Sovelma käännetään aluksi samalla tavalla kuin Java-sovelluskin. Yhteen sopivuuden vuoksi kääntämisessä kannattaa antaa käännetyn koodin versioksi 1.1 parametrilla target.
C:\java> javac -target 1.1 YmpyraSovelma.java C:\java>
Käännöksen tuloksena syntyy tiedosto "YmpyraSovelma.class". Tämä tiedosto laitetaan sellaiseen hakemistoon, josta HTML-sivu pääseen siihen käsiksi. Vaihtoehtoina ovat sama hakemisto tai sitten jokin muu saman www-palvelimen hakemisto. Oletetaan, että sovelma on samassa hakemistossa sivun kanssa. Silloin sovelma avataan sivulle applet-elementillä:
<applet code="YmpyraSovelma.class" width="150" height="150"> Sovelmat eivät toimi tässä selaimessa. </applet>
Elementissä määritellään siis sovelman käännetyn tiedoston nimi ja sovelman koko sivulla. Alla on nyt todellakin näkyvillä ym. sovelma (jos käytetty selain tukee sovelmia). Reunus sovelman ympärillä on laitettu tähän selvyyden vuoksi.
Funktion paint-sisälle kirjoitetun koodin tarkoitus on piirtää sovelman sisältö. Siinä voi käyttää esimerkiksi seuraavia lauseita:
| Piirrettävä kuvio | Lause ja esimerkki |
|---|---|
| Viiva pisteestä (x1, y1) pisteeseen (x2, y2) | g.drawLine(x1, y1, x2, y2); g.drawLine(0, 0, 100, 200); |
| Suorakulmion kehys, vasen yläkulma pisteessä (x, y), leveys ja korkeus määriteltynä | g.drawRect(x, y, leveys, korkeus); g.drawRect(10, 50, 200, 100); |
| Suorakulmion sisäosa (täytetty), vasen yläkulma pisteessä (x, y), leveys ja korkeus määriteltynä | g.fillRect(x, y, leveys, korkeus); g.fillRect(10, 50, 200, 100); |
| Soikion kehys, vasen yläkulma pisteessä (x, y), leveys ja korkeus määriteltynä | g.drawOval(x, y, leveys, korkeus); g.drawOval(10, 50, 200, 100); |
| Soikion sisäosa (täytetty), vasen yläkulma pisteessä (x, y), leveys ja korkeus määriteltynä | g.fillOval(x, y, leveys, korkeus); g.fillOval(10, 50, 200, 100); |
| Merkkijono m, perusviivan vasen reuna pisteessä (x, y) | g.drawString(m, x, y);
g.drawString("Heippa", 10, 50); |
Sovelman koordinaatisto muodostuu siten, että piste (0, 0) on vasemmassa ylänurkassa, pystykoordinaatit kasvavat alaspäin ja vaakakoordinaatit oikealle.
Lauseissa mainitut parametrit, kuten x, y,
leveys ja korkeus voivat olla
muuttujia.
Lisäksi seuraavaksi piirrettävien kuvioiden värin voi vaihtaa
funktiolla g.setColor(Color.vari), jossa vari
on jokin tavanomaisen värin nimi (esimerkiksi white, black,
red, blue, ...).
Tehtävä B3: Toteuta sovelma, joka piirtää annetulle alueelle yksityiskohtaisen tikku-ukon. Käytä ukossa eri värejä!