Käyttöliittymien toteutuksesta Javalla
Ennen kuin käymme käsiksi laskurimme ulkoasuun, on syytä luoda silmäys Javan hieman erikoiseen käyttöliittymätekniikkaan. Kun Visual Basicissa, Delphissä ja vastaavissa työkaluissa komponentteja vain raahataan ikkunan alueelle haluttuun paikkaan, Javassa sijoittelu hoidetaan huomattavasti monimutkaisemmilla välineillä. Käyttäjä ei määrittele komponenttien sijaintia pikselin tarkkuudella, vaan kokoaa ohjelmansa käyttöliittymän määrittelemällä sen osasten sijaintien keskinäiset suhteet.
Keskeinen osa tätä sijoittelutapaa ovat niin kutsutut LayoutManagerit. Ne ovat jonkinasteista tekoälyä sisältäviä Java-luokkia, jotka huolehtivat komponenttien sijoittelusta käyttäjän antamien viitteellisten ohjeiden mukaan. Sijoittelijoita on monenlaisia, esimerkiksi BorderLayout ymmärtää ilmansuuntia määreiksi: Buttonin sijoittaminen suuntaan north tarkoittaa sitä, että lomakkeen yläosaan ("pohjoiseen") ilmestyy nappula.
Sijainnin lisäksi myös komponenttien koko määräytyy tietyin rajoituksin niitä ympäröivän LayoutManager-olion asettamien sääntöjen mukaan. Olennaista onkin ymmärtää, että Java-välineistöllä ei ole tärkeintä luoda aivan eksaktia pikselitaidetta, vaan pyrkiä selkeään ja siistiin kokonaisuuteen. LayoutManagerien sisäkkäisellä ja huolellisella sijoittelulla on kyllä mahdollista päästä varsin hyvään tulokseen, vaikka se vähän kokemusta vaatiikin.
Mitä hyötyä tästä monimutkaisesta järjestelmästä sitten on? Tärkeää on muistaa, että Java-ohjelmat on suunniteltu toimimaan laitteistosta ja ympäristöstä riippumatta. Esimerkiksi Unix-alustoilla nappula on eri näköinen ja mahdollisesti myös aivan eri kokoinen kuin Windowsissa. Java-työkalut pyrkivät tarjoamaan käyttäjälle mahdollisuuden määritellä ulkoasun mahdollisimman tarkasti - mutta kuitenkin siten, että ohjelma osaisi itse mukautua minkä tahansa kokoisiin elementteihin. Vaikka tämä väistämättä tarkoittaakin joidenkin luovien ratkaisujen hylkäämistä rajoittavan tekniikan edessä, on lopputulos yleensä kohtuullisen siisti, laitteistoriippumaton käyttöliittymä.
Yleisimpiä komponentteja
Vielä viimeiseksi ennen itse käyttöliittymän tekoa kurkistamme Javan AWT-komponenttipaketin sisältöön, eli tavallisimpiin käyttöliittymän rakennuspalikoihin. Valtaosa mukana olevista on Windows-maailmasta tuttuja, mutta niiden käyttö saattaa Javan toimintatavan vuoksi olla tutusta poikkeavaa.
Kun klikkaat itsesi Design-välilehdelle ja avaat komponenttipaletista AWT-välilehden, saat kuvan mukaisen palettisivun näkyviisi. Seuraavassa esittelemme tiiviisti tavallisimmat välilehdeltä löytyvät välineet.
Javan nappula toimii kuten Windows-kehittimistäkin tuttu vastaava. Huomaa kuitenkin, että nappulan koon ratkaisee pääosin sen ulkopuolinen LayoutManager, joten napin koon muuttaminen ei onnistu vain kulmasta raahaamalla.
Checkbox on tuttu ruksittava ruutu. Se voi olla joko ruksittuna tai tyhjä, ja käyttäjä voi vaihtaa sen tilaa klikkaamalla. Windowsissa Checkboxin lisäksi myös ns. Radiobutton-olio (
), joka muodostaa ryhmän kaltaistensa kanssa. Radiobuttonin erikoisominaisuus on se, että niitä voi olla valittuna vain yksi kerrallaan.
Javassa ei Radiobutton-komponenttia ole, vaan vastaava toiminto toteutetaan yhdistämällä Checkbox-olioita CheckboxGroup-nimisellä oliolla. Samaan ryhmään kuuluvista ruksilaatikoista vain yksi voi olla kerrallaan valittuna.
Label-olioilla voit lisätä ohjelmasi käyttöliittymään esimerkiksi avustetekstejä tai otsikoita. Labelin tekstiä ei voi käyttäjä muuttaa, mutta koodista käsin se tietenkin onnistuu, myös ohjelman suorituksen aikana.
TextField-olio vastaa Windows-kehittimissä käytettyä Edit-kenttää, johon käyttäjä voi kirjoittaa yhden rivin tekstiä. Kenttä voi olla myös vain luku -tyyppiä, jolloin se muistuttaa toiminnaltaan Labelia, mutta näyttää muokattavalta kentältä.
Viimeisenä muttei suinkaan vähäisempänä käsittelemme Panel-oliota. Se ei näytä miltään, mutta on silti jokaisen ohjelman tärkein osa. Paneelit ovat "taustalevyjä", joiden päälle muut komponentit sijoitellaan. Jokaisella paneelilla voi olla oma sijoittelumallinsa (LayoutManager), ja näiden sisäkkäisellä käytöllä saadaan aikaan monimutkaisempia sijoitteluja. Paneelien sisäkkäinen käyttö muistuttaa etäisesti HTML-kielen taulukoiden muotoilua.