Første |
|
|
Objekt kommunikation serie, Planche nr. 25 |
 |
Udskrift af : Objekt kommunikation
|
Planche 1 : Objekt kommunikation
Java-objekter kommunikerer på 3 måder:
- Beskeder (alm. metoder)
- Hændelser ("events")
- Undtagelser ("Exceptions")
Planche 2 : Hændelser ("Events")
Hændelser er metoder, der udføres som en del af den forventede afvikling
af programmer, på tidspunkter der ikke kan fastsættes.
Eksempel:
- Museklik,
- Tastaturtryk,
- Kompenentaktivering
Planche 3 : 2 modeller
- Eventmodel 1.0
- "Vandfaldsmetoden" ~ Windows-modellen
- Eventmodel 1.1
Planche 4 : Eventmodel 1.0
- Overskriv handleEvent() metoden
public bolean HandleEvent (Event e) {
... kig på e, for at se, om det var en hændelse du kan bruge
return true ; // hvis du har "brugt" eventet
..
return false ; // hvis du ikke har "brugt" eventet
}
- eller en af undermetoderne.
-
action()
-
mouseEnter()
-
mouseExit()
-
mouseMove()
-
mouseDown()
-
mouseDrag()
-
mouseUp()
-
keyDown()
-
keyUp()
-
gotFocus()
-
lostFocus()
Det var den model, der blev brugt i Java Intro kurset.
Planche 5 : Begrænsninger
Man bør ikke anvende model 1.0 fordi:
- HandleEvent() skal håndtere ALT
- Flere komponenter => Flere betingelser
- meget kompliceret at vedligeholde
- Man kan kun overskrive i subklasser
- Man kan altså ikke modificere standardklassers action()
(Det var derfor, at det var vores applet-udvidede klasse, der skulle håndtere alle mulige
action() og derefter sortere dem.)
Planche 6 : Eventmodel 1.1
Der er to dele i eventmodel 1.1
- Objektet, der modtager hændelsen
- Hændelseslytteren ("Event Listener")
- modtager hændelser af en bestemt type, f.eks. fra musebevægelser
De sammenkædes, ved at lytteren registrerer sig for at modtage en
speciel hændelse.
Planche 7 : Event klasser
- V.1.0: Én hændelsesklasse
- V.1.1: En pakke hændelsesklasser:
Planche 8 : Implementer V.1.1
- 1. Beslut hvilken hændelser, man ønsker at bruge
- 2. Skriv kode for lyttermetoden
- 3. Registrer lytteren.
Planche 9 : Eksempel - Trin 1
Kig i java.awt.event og find en passende klasse:
Se nærmere i pakke-dokumentationen
Planche 10 : Eksempel - trin 1 (fortsat)
Klasserne implementeres v.h.a følgende interface-klasser:
ActionListener
AdjustmentListener
ComponentListener
ContainerListener
FocusListener
ItemListener
KeyListener
MouseListener
MouseMotionListener
TextListener
WindowListener
De mest interessante er:
- ActionListener
- MouseListener
- MouseMotionListener
- KeyListener
Planche 11 : Eksempel: Trin 2
Implementer interface.
2 måder:
- Lad appletten (eller applikationsklassen) implementere:
class MinKlasse implements Lytterinterface
- Overskriv metoderne fra lytterklassen.
- Udvid event-klasserne og overskriv metoderne heri.
- Mest velegnet til store programmer med mange klasser
Planche 12 : Eksempel: Trin 2 (fortsat)
Interface ActionListener har en metode, actionPerformed()
Hvis klassen selv er lytter (et event pr klasse)
java.awt.event.*;
class MinApplet extends java.applet.Applet implements ActionListener {
// øvrige kode...
public void actionPerformed(ActionEvent e) {
// behandling af aktions event
}
// øvrige kode
}
Hvis man opretter en særlig lytter-klasse
java.awt.event.*;
class MinApplet extends java.applet.Applet {
// øvrige kode...
class MinActionListener implements ActionListener {
Lokalhenvisning h;
MinActionListener(Lokalhenvisning h) {
// konstruktør
this.h = h ;
}
public void actionPerformed(ActionEvent e) {
// behandling af aktions-hændelse
}
}
// øvrige kode
}
Planche 13 : Eksempel: Trin 3
Registrer lytteren:
- Hvis klassen selv er lytter:
- kald tilføjelses-metode med this
- Hvis man har lavet en lytterklasse
- kald tilføjelses-metoden med et objekt af klassen
Planche 14 : Eksempel: Trin 3 (fortsat)
Registrer ActionListener:
- Klassen selv lytter:
- addActionListener (this);
- MinActionListener er defineret
- ml = new MinActionListener();
- addActionListener(ml);
Planche 15 : Fra 1.0 til 1.1:
Chekliste:
- Tilføj java.awt.events.*
- Tilføj de nødvendige 'implements interfaces'
- Overskriv (implementer) metoderne i disse interfaces
- Hent den tilsvarende kode i V.1.0 versionen
- fjern
return
udtryk (1.1 metoderne er void)
Javac og kryds fingrene... :-)
Planche 16 : Opgave 5
Kopier opgave 4 fra java intro over til ny folder (JavaOpg5)
og konverter fra 1.0 til 1.1
Brug eventuelt GUIApp-klassen fra Intro-kursets løsningsforslag
- Hint
- Objektet føres ikke med i event-parametre. Brug en indre klasse når der er flere knapper
på en side.
(Gå til afsnittet om Swing - resten køres før File IO)
Planche 17 : Undtagelser ("Exceptions")
Undtagelser er hændelser, der indtræffer på grund af uventede
begivenheder.
Planche 18 : Fejlhåndtering
int status = metodeDerNæstenVirker();
if (status == SÆR_RETUR_KODE) {
// gør noget ved det
switch(Fejlindikator) {
// håndter mere specifik kode
}
} else {
// alt i orden - fortsæt normalt
..
}
try {
metodenDerNæstenVirker();
} catch {
// metoden fejlede - gør noget!
}
// fortsæt normal kode...
Planche 19 : Javaundtagelser (klasser)
Undtagelsesklasser stammer alle fra
Og de fleste findes i java.lang.*
Men man kan oprette sine egne...
Planche 20 : Kastes?
- Undtagelser skabes ("are thrown")
Planche 21 : Manglende Undtagelser
Hvis man mangler at implementer en undtagelse, vil compileren gøre opmærksom på det
og nægte at danne kode!
Planche 22 : Implementer undtagelser
Håndter undtagelser ved
- 1. beskyt kode med en
try
blok
- 2. Håndter undtagelsen med en
catch
blok
- Flere catch-blokke efter hinanden
- Flere undtagelser i samme catch
Ryd evt. op med
(Finally udføres altid - både efter undtagelser og normal proces)
Planche 23 : Syntaks
try {
// sætninger, der skal beskyttes
}
catch ( Liste af undtagelsesvariable ) {
// sætninger, der redder fejl
}
// alm. sætninger, udføres hvis det gik godt.
Der kan være flere catch-blokket efter hinanden på den samme try
Eksempel på undtagelsesvariabelerklæring: Exception e
Planche 24 : Send videre
Undtagelser kan skabes fra kode
throw new Undtagelsesklasse
Planche 25 : Klasse signatur
- Klasser erklæres som
throws
Undtagelsesklasse
© 1998 BLA*net - Leif E. Andersen,
leander@blanet.dk