Kirjoita ohjelma SwingHeippa. SwingHeipan ajamisen tulee luoda ikkuna, jonka keskellä on teksti "Heippa!". Tee luokka seuraavissa vaiheissa:
Määritä luokka siten, että SwingHeippa perii luokalta
javax.swing.JFrame. Kirjoita tarvittava
import-lause. Miten periytyminen saadaan
aikaiseksi?
Kirjoita luokkaan luontimetodi, joka ei ota yhtään argumenttia.
Tee luontimetodissa uusi instanssi luokasta
javax.swing.JLabel. Lisää tarvittava
import-lause tiedoston
alkuun. Jlabel:n luontimetodi ottaa
argumenttina merkkijonon. Käytä merkkijonoa "Heippa!".
Lisää edellisessä kohdassa luotu tekstiolio
SwingHeippa-kehyksen alikomponentiksi. Lisääminen ei
tapahdu suoraan SwingHeippa-kehykseen vaan sen
sisältämään sisältöpaneeliin, joka saadaan poimittua
metodilla getContentPane(). Lisääminen
tehdään sisältöpaneelin add-metodilla,
jolle annetaan argumenttina luotu tekstiolio.
Lisää SwingHeippa-kehykseen ikkunatapahtumien kuuntelija (WindowListener). Sen tehtävänä on reagoida käyttäjän ikkunaan kohditamia toimintoja, ja erityisesti lopettaa ohjelman suoritus, mikäli ikkuna suljetaan. Ilman tätä kuuntelijaa ohjelma jää toimimaan ikkunan sulkemisen jälkeenkin.
Ikkunakuuntelija luodaan luokasta
java.awt.event.WindowAdapter. Sille määritellään
luomisen yhteydessä uudestaan yksi metodi, jonka pää on
public void windowClosing(WindowEvent e).
Metodin rungossa ohjelman suoritus lopetetaan komennolla
System.exit(0). Selvitä API:sta (Javan
luokkakirjaston dokumentaatiosta), mitä tämä komento
tekee ja mitä argumentti 0 tarkoittaa.
Lisää tiedoston alkuun import-lauseet
ikkunadapteriluokalle
java.awt.event.WindowAdapter sekä
ikkunatapahtumaluokalle
java.awt.event.WindowEvent.
Ikkunakuuntelija lisätään kehykseen (this) metodilla
addWindowListener, jolle annetaan
argumentiksi uusi ikkunankuuntelija.
Huolehdi lisäksi siitä, että komponentit pakataan ja
tehdään näkyviksi. Eli lisää luontimetodin loppun
komennot pack() ja show().
Kirjoita lopuksi luokkaan SwingHeippa pääohjelmametodi
(main), joka luo yhden instanssin luokasta
SwingHeippa.
Käännä ohjelma, korjaa virheet ja aja. Ikkuna ilmestyy pienikokoisena ruudun vasempaan yläkulmaan. Suurenna sitä vetämällä sen oikeasta alakulmasta.
Muuta kohtaa, jossa tekstiolio (JLabel) luodaan. Anna
luontimetodille toiseksi argumentiksi vakio
JLabel.CENTER.
Käännä ja aja ohjelma. Suurenna ikkunaa. Mikä on ero aikaisempaan?
Kirjoita ohjelma, jonka ajaminen luo ikkunan, jossa on kaksi komponenttia:
JLabel), jossa näkyy aluksi merkkijono "Kyllä"
JButton), jossa näkyy nimi "Vaihda"
Kun painiketta painetaan, tekstiolion teksti "Kyllä" muuttuu tekstiksi "Ei" tai mikäli tekstioliossa lukee "Ei" se vaihtuu tekstiksi "Kyllä".
Toimi seuraavasti:
Kirjoita tämä ohjelma luokkana, jonka nimi on
Vaihto. Tee siitä luokan JFrame
aliluokka. Määritä luokalle ominaisuusmuuttujat JLabel
teksti ja JButton.
Määritä luokalle myös luontimetodi, jossa luot ikkunakuuntelijan, tekstiolion ja painikkeen samaan tapaan kuin edellisessä harjoituksessa.
Lisää tekstiolio kehyksen sisältöpaneeliin (jonka saat siis
selville metodilla
getContentPane(). Sisältöpaneelissa on
oletusarvoisesti asetteluperiaatteena
BorderLayout. Kun lisäät tekstiolion ja
painikkeen sisältöpaneeliin, voit antaa
add-metodille ylimääräisen argumentin, joka
määrittää komponentin paikan. Anna tekstiolion paikaksi
BorderLayout.CENTER ja painikkeen paikaksi
BorderLayout.SOUTH. (Tarvitseeko sinun
importoida jokin luokka?)
Lisää painikkeeseen toiminnonkuuntelija. Luo ensin
kuuntelija rajapintaluokasta ActionListener ja
määritä sille luomisen yhteydessä metodi public void
actionPerformed(ActionEvent e). Lisää tarvittavat
import-lauseet. Määritä metodin runko siten,
että se muuttaa tekstiolion (joka löytyy siis
ominaisuusmuuttujasta teksti) tekstin
merkkijonoksi "Kyllä" tai "Ei". Voit käyttää tekstiolion
metodia setText. Katso API:sta kuinka metodi
toimii. Miten saat selville tekstiolion aikaisemman tilan?
Lisää pääohjelmametodi, joka luo yhden instanssin luokasta
Vaihto.
Käännä ohjelma ja aja se. Kokeile painikkeen toimintaa.
Kirjoita ohjelma, jonka ajaminen luo ikkunan, jossa on kolme komponenttia:
JLabel), jonka sisältönä alussa on jokin
gif-muodossa oleva kuva; alustus tehdään antamalla luontimetodille
argumenttina kuvatiedoston nimi
JButton), jossa on teksti "Edellinen"
JButton), jossa on teksti "Seuraava"
Kun painiketta painetaan, tekstioliossa oleva kuva vaihtuu. Luokassa
täytyy siis olla lista kuvatiedostojen nimistä. Tekstiolion kuvan
voit vaihtaa metodilla setIcon. Selvitä API:sta kuinka
se toimii.
Suunnittele ohjelma itse. Ohjelman yleinen rakenne on samantapainen kuin edellisissä harjoituksissa. Huomaa kuitenkin seuraavat seikat:
Joudut hankkimaan jostain itsellesi muutama sopiva kuvatiedostoja; ne kannattaa tallettaa samaan hakemistoon ohjelman kanssa (tai johonkin sen alihakemistoon).
Mieti minkälaisia komponentteja, välitason säiliöitä
(JPanel) ja asettelumekanismeja
(LayoutManager) tarvitset.
Mieti, mitä teet listan päässä.