Praktikumitöö:graafiline rakendus
ESIALGNE SPECI TOORIK, MITTE LÕPLIK ÜLESANNE
Taustaks võid vaadata veidi sarnast ülesannet eelmisest aastast: Praktikumitöö:võrgurakendus 2005 ja Praktikumitöö:võrgurakendus
Ülesandeks on teha käsurealt käivitatav rakendus, mis arvutab statistikat ja esitab graafiliselt infot ...
Kasutajaliides
Kasutajaliides peab koosnema vähemalt järgmistest komponentidest:
- nupupaneel, kus on neli valikuboksi, kolm tekstivälja ja "Otsi!" nupp:
- Valikuboks: sorteerimine (suurus, hind, ruutmeetri hind)
- Valikuboks: maakond
- Valikuboks: otstarve
- Valikuboks: veekogu
- Tekstivali: otsisonad
- Tekstivali: Maks hind
- Tekstivali: Min hind
- joonistamispaneel, kuhu rakendus kasutaja valitud andmete saamise järel statistikat kirjutab ja illustratiivset infot annab.
Vigade korral kuvatakse veatekst joonistamispaneelile.
Mida tuleb graafiliselt kujutada:
Kuidas graafik võiks välja näha
Iga graafik peaks olema joon, soovitavalt iga joon kolmest eri värvi. Hea mõte on teha näiteks sorteerimise aluseks valitud joon paksemaks (ühe drawLine asemel tee kaks, y koordinaati ühe pikseli võrra nihutades)
Kindlasti tee koordinaatide rehkendus nii, et jooned mahuks ekraanile ära ja ei jääks liiga väikeseks (ideaalis jookseks maks punkt joonistamisruumi ääreni).
Soovitusi
Alustamiseks
Alustamiseks võid kasutada seda näiterakendust, mida loengus oleme arendanud: guiexample.java.
NB! guiexample.java kasutamise korral on mõttekas panna buttonpanel akna alläärde (SOUTH), muidu peab hakkama lahendama küsimust comboboxi kuvamisest Canvas'e peale.
Mõttekas on lugeda läbi ka Ecki õpiku GUI-komponentide peatükk http://math.hws.edu/javanotes/c7/s3.html ja selle jätk http://math.hws.edu/javanotes/c7/s4.html.
Põhjaliku comboboxide kasutusjuhendi leiad siit: http://java.sun.com/docs/books/tutorial/uiswing/components/combobox.html Muuhulgas soovitab juhend sellist struktuuri:
public class ComboBoxDemo ... implements ActionListener {
. . .
petList.addActionListener(this) {
. . .
public void actionPerformed(ActionEvent e) {
JComboBox cb = (JComboBox)e.getSource();
String petName = (String)cb.getSelectedItem();
updateLabel(petName);
}
. . .
}
kus ComboBoxDemo rolli sobiks meie juhul guiexampleFrame klass, mille sees olev keeruline nupu külge pandav addActionListener
button.addActionListener(new ActionListener() { ....
});
tuleks asendada lihtsamaga:
button.addActionListener(this);
Samuti soovitan teha guiexampleFrame ümber nii, et comboboxid oleks guiexampleFrame klassis (kus on ka äsjakirjeldatud handler nupule) klassi jaoks globaalsed muutujad. Hoiatus äsjatoodud ComboBoxDemo jaoks: see näide eeldab, et ActionEvent e tuleb comboboxi muutmisest, meie juhul tuleb ta aga hoopis nupust. Seega (JComboBox)e.getSource() ei ole meie jaoks mõttekas, pigem tuleb lihtsalt lugeda comboboxide kui guiexampleFrame jaoks globaalsete muutujate väärtust.
Lähiajal tuleb siis veidi lisa-näpunäiteid, vastavalt loengus toimunud etteprogrammeerimisele.
Kasulikke tutoriale (lisaks Ecki raamatule)
- Sun-i tutorial võrgu kasutamiseks
- Sun-i tutorial GUI tegemiseks Swing teegi abil, sh ülalviidatud comboboxide kasutusjuhend: http://java.sun.com/docs/books/tutorial/uiswing/components/combobox.html