8. praktikum (Sündmuste töötlemine).
Teemad
Sündmused. Kuularid. Kasutajaliidese loomine. Graafilised komponendid.
Peale
selle praktikumi läbimist oskab üliõpilane
luua kuularit;
siduda kuularit sündmuse tekitajaga;
siduda kuularit sündmusele reageerijaga.
Javas
on kasutajaliidese komponentidega toimuvate sündmuste
töötlus
kirjeldatud pakettides java.awt.event
ja
javax.swing.event
asuvates
liidestes.
Soovides ise defineerida mingit kuularit, peame
kõigepealt otsustama, millist tüüpi
sündmustele
hakkab kuular reageerima. Seejärel koostame kuularit
kirjeldava
klassi, mis realiseerib vastava
sündmusetüübi
sündmustele vastavat liidest. Graafilise kasutajaliidese
vahendusel toimuvate sündmuste käsitlemiseks enam
vajalikud
liidesed on:
ComponentListener -- komponendi maksimeerimise, liigutamise ja nähtavuse sündmused;
ContainerListener -- konteineri sisuga toimuvad sündmused;
FocusListener -- sisendfookuse (nt klaviatuuri seostamine mingi komponendiga) ümberpaiknemise sündmused;
KeyListener -- klahvivajutuste sündmused;
MouseListener -- hiireklahvide vajutamise sündmused;
MouseMotionListener -- hiire liikumise sündmused;
WindowListener -- aknasündmused;
ActionListener -- üldised sündmused.
Näitena kirjeldame kuulariklassi, mis kuulariga seostatud nupu vajutamisel teatab nupu märgendi väärtuse.
import
java.awt.event.*; |
Kasutajaprogrammis
loome kolm nuppu. Nupu seostame klassi Nupukuular
isendiga,
kasutades
klassi JButton
ülemklassi
AbstractButton
meetodit
addActionListener(ActionListener).
import
java.awt.*;
raam.add(nupp1);
raam.setSize(500,
200); |
Graafikaobjekt
võib olla ka iseendaga toimuvate sündmuste kuular.
Sellisel juhul pole vaja kirjeldada omaette klassi, kõik
liideses määratud sündmuste meetodid
realiseeritakse
samas klassis, kus objekti funktsionaalsuski.
import
java.awt.event.*; |
Ülesanne
1
Luua
iga järgneva graafikakomponendi jaoks vastavat liidest
realiseeriv kuulariklass:
JCheckBox -- ItemListener, ChangeListener
JRadioButton -- ActionListener, ChangeListener
JComboBox -- ItemListener
JList -- ListSelectionListener
JTextField -- DocumentListener , nt. myArea.getDocument().addDocumentListener(myListener);
Kirjutada iga sündmuse jaoks mõistlik töötlus. Kirjutada testklass, milles luuakse igast kuulariklassist vähemalt üks isend.
Abiks võib olla juhend.
Mõned lingid videoõpetustele:
http://thenewboston.org/watch.php?cat=31&number=52
http://thenewboston.org/watch.php?cat=31&number=53
http://thenewboston.org/watch.php?cat=31&number=54
Ülesanne 2
Kirjutada programm, milles hiirega nupule liikudes "jookseb" nupp eest ära.
Juhis: Tuleb luua nupu jaoks kuulariklass, mis realiseerib MouseMotionListener liidest. Sõltuvalt sellest, mis suunast tuleb hiir nupule, liigutada nupp (nt. kui hiir tuleb vasakult, siis liigutada nupp paremale). Selleks, et saada teada, mis suunast hiir tuleb nupule, võib kasutada hiire asukoha koordinaadid, kus toimus sündmus (kui muutuja e on MouseEvent tüüpi, siis võib kasutada meetodeid e.getX() ja e.getY()) ning nupu laiust ja kõrgust (kui muutuja e on MouseEvent tüüpi, siis võib kasutada meetodeid e.getComponent().getWidth() ja e.getComponent().getHeight()). Nupu asukoha muutmiseks võib kasutada meetodit e.getComponent().setLocation(x,y), kus e on MouseEvent tüüpi ning x ja y on uued täisarvulised koordinaadid.
Ülesanne 3
Kirjutada programm, mis esitab kuni 5 valikvastusega (vaid üks õige / mitu õiget) küsimusi ja annab tagasisidet vastajale.