Kurkistus lähdekoodiin
Tällä sivulla käymme läpi tähän asti syntyneen lähdekoodin rivi riviltä. Vaihda Source-välilehdelle ja seuraa rivi riviltä. Varmista, että ymmärrät kaiken! Se helpottaa huomattavasti ohjelmointia jatkossa. Oma koodisi ei välttämättä näytä aivan täsmälleen samalta, mutta paljoa ei pitäisi puuttuakaan.
package ikalaskuri;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
Package-rivi kertoo, mihin pakkaukseen ohjelmasi kuuluu. Tätä käsiteltiin jo applettivelhon ensimmäisellä sivulla. Import-lauseet puolestaan kertovat, mitä muita pakkauksia ohjelmasi käyttää. Esimerkiksi ensimmäinen import-rivi kertoo, että käyttöön otetaan java-pakkauksen alipakkaus awt:stä kaikki luokat(*). Myös awt:n alipakkaus event otetaan kokonaan käyttöönsä, kuten myös java.applet. Aina ei ole pakko ottaa käyttöön kaikkia luokkia, vaan myös yksitellen ottaminen onnistuu: import java.awt.Label
on siis täysin kelvollista koodia. Näin ei kuitenkaan kannata käyttöliittymäkomponenttien kanssa tehdä, koska niistä tarvitaan joka tapauksessa hyvin montaa erilaista.
/**
* Title: Ikälaskuri
* Description: Web-sivuille tehty appletti...
* Copyright: Copyright (c) 2001
* Company: SuloSoft Ky
* &author Sulo Surffaaja
* &version 1.0
*/
/**
- ja */
-merkkien väliin sijoitettu pätkä tekstiä sisältää Javadoc-standardin mukaiset otsakekommentit. Nämä JBuilder luo automaattisesti Applet-velhon yhteydessä.
public class WebLaskin extends Applet {
Luokan otsake kertoo sen nimen ja yliluokan: WebLaskin siis on Applet-luokan (koko nimeltään java.applet.Applet ) aliluokka.
boolean isStandalone = false;
GridLayout Pystyjako = new GridLayout();
Panel Tulospaneeli = new Panel();
Panel Syottopaneeli = new Panel();
Panel Nappipaneeli = new Panel();
Label TulosTeksti = new Label();
TextField PaivaKentta = new TextField();
TextField KuukausiKentta = new TextField();
TextField VuosiKentta = new TextField();
Label Piste1 = new Label();
Label Piste2 = new Label();
Button LaskeNappi = new Button();
Luokan muuttujamäärittelyt luovat uusia kenttiä. Ensimmäinen rivi on JBuilderin luoma, muut ovat itse luomiamme käyttöliittymäkomponentteja. New-operaattori palauttaa uuden ilmentymän luokasta, joten esimerkiksi rivi Panel Nappipaneeli = new Panel();
luo uuden Panel-luokan ilmentymän ja sijoittaa sen Nappipaneeli-nimiseen muuttujaan.
/**Get a parameter value*/
public String getParameter(String key, String def) {
return isStandalone ? System.getProperty(key, def) :
(getParameter(key) != null ? getParameter(key) : def);
}
/**Construct the applet*/
public WebLaskin() {
}
/**Initialize the applet*/
public void init() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
Kaikki nämä metodit kuuluvat JBuilderin luomaan pohjakoodiin - tai oikeastaan vain runkoon, sillä kovin paljon metodit eivät toistaiseksi tee. getParameter()-metodi palauttaa appletille annetun parametrin arvon, mutta Ikälaskurissa sitä ei tarvita. WebLaskin()-niminen metodi on luokan konstruktori, jota ei kuitenkaan tämän appletin yhteydessä tarvita. Init()-metodi suoritetaan, kun selain lataa appletin. Tällöin appletti kutsuu omaa, automaattisesti luotua jbInit()-metodiaan, joka alustaa graafisen käyttöliittymän.
Huomaa myös try-catch-rakenne: jos jbInitin suorituksessa tapahtuu poikkeus, siirrytään catch-lohkossa olevaan virheenkäsittelyrutiiniin. Tässä tapauksessa kutsutaan vain printStackTrace()-metodia, joka tulostaa virheen selvittelyä helpottavia tietoja.
/**Component initialization*/
private void jbInit() throws Exception {
Pystyjako.setRows(3);
this.setLayout(Pystyjako);
TulosTeksti.setFont(new java.awt.Font("Dialog", 0, 22));
TulosTeksti.setText("Syötä ikäsi!");
PaivaKentta.setColumns(2);
KuukausiKentta.setColumns(2);
VuosiKentta.setColumns(4);
Piste1.setText(".");
Piste2.setText(".");
LaskeNappi.setLabel("Laske!");
this.add(Tulospaneeli, null);
Tulospaneeli.add(TulosTeksti, null);
this.add(Syottopaneeli, null);
Syottopaneeli.add(PaivaKentta, null);
Syottopaneeli.add(Piste1, null);
Syottopaneeli.add(KuukausiKentta, null);
Syottopaneeli.add(Piste2, null);
Syottopaneeli.add(VuosiKentta, null);
this.add(Nappipaneeli, null);
Nappipaneeli.add(LaskeNappi, null);
}
jbInit()-metodissa näkyy, kuinka JBuilder on muuttanut tekemämme komponenttien oletusasetukset normaaliksi Java-koodiksi. Järjestys ei ole sama kuin missä muutokset itse teimme, mutta sisältö on kyllä vastaava. Add-rivit lisäävät komponentteja niihin paneeleihin joihin ne kuuluvat. Ensin Tulospaneeli lisätään itse applettiin, sitten Tulospaneeliin lisätään luomamme Label. Tämän jälkeen vastaavat temput tehdään Syottopaneelin ja Nappipaneelin sisällöille. Huomaa, että rivien järjestyksen muuttaminen tässä vaihtaa myös komponenttien järjestystä itse ohjelmassa!
/**Start the applet*/
public void start() {
}
/**Stop the applet*/
public void stop() {
}
/**Destroy the applet*/
public void destroy() {
}
/**Get Applet information*/
public String getAppletInfo() {
return "Applet Information";
}
/**Get parameter info*/
public String[][] getParameterInfo() {
return null;
}
Lopun koodista muodostavat viisi metodirunkoa. start() suoritetaan kun appletti tulee näkyviin selaimessa (esimerkiksi kun käyttäjä vierittää oikean kohdan sivua esiin) ja stop() vastaavasti kun appletti katoaa näkyvistä. destroy() on init():in vastakohta, ja ajetaan kun appletti on juuri tuhoutumassa selaimen muistista. getAppletInfo()-metodi voi palauttaa tietoa appletista, ja sen palautusarvoa kannattaakin muuttaa: yleensä mukana on tiedot tekijästä, ohjelman versiosta ja vastaavista asioista. Sopiva rivi on esimerkiksi:
return "WebIkäLaskuri, (C) 2001 Sulo Surffaaja";