Föreläsningsanteckningar

Föreläsning 3: Händelsestyrda program och
användargränssnitt
I
Idag
I
I
I
I
Från sekventiella till händelsestyrda program
Lyssnare
Kontroller
Layout för ordning av kontroller
(2 september 2015 – F3.1 )
Sekventiella program
Vad karaktäriserar ett sekventiellt program?
I
Programmet utför instruktionerna i den ordning de står i programmet
och operationer kan ofta utföras direkt utan fördröjning.
I
De flesta program ni har sett hittills har varit mestadels sekventiella.
I
Relativt lätta att analysera och hitta fel i.
(2 september 2015 – F3.2 )
Händelsestyrda program
Vad karaktäriserar ett händelsestyrt program?
I
Programmet överlåter kontrollen till en mekanism som fångar och
reagerar på händelser av olika slag.
I
Man skapar så kallade lyssnare som anropas när en given händelse
inträffar.
I
Omvänt kontrollflöde mot sekventiella program.
(2 september 2015 – F3.3 )
Lyssnare
Lyssnare är objekt med specifika callback-metoder. Ofta defineras
lyssnar-typer som så kallade interface (mer om dem senare i kursen) med
en eller flera metoder som man implementerar.
Javas standardbibliotek definerar lyssnar-typen ActionListener (i paketet
java.awt.event) med metoden
void actionPerformed(ActionEvent event).
ActionListener används för att reagera på händelser från fördefinerade
komponenter som timer, knappar, textrutor och många fler.
(2 september 2015 – F3.4 )
ActionListener
För att förvandla klassen ExampleWindow från gårdagens föreläsning till en
lyssnare av typen ActionListener krävs följande åtgärder:
I
Importera ActionListener och ActionEvent:
import java.awt.event.*;
I
Deklarera att klassen är en ActionListener:
public class ExampleWindow extends JFrame implements
ActionListener
I
Implementera metoden actionPerformed:
@Override
public void actionPerformed(ActionEvent e) {}
(2 september 2015 – F3.5 )
Timer istället för loop och sleep
När klassen är en lyssnare kan vi byta ut loopen mot en timer med följande
kod:
ExampleWindow ew = new ExampleWindow(); // window initialization
Timer t1 = new Timer(2000, ew); // delay: 2000 ms, listener: ew
t1.start();
Klassen Timer finns i paketet javax.swing.
(2 september 2015 – F3.6 )
Gränssnittsstyrning med kontroller
För att introducera interaktivitet i ett händelsestyrt program används
vanligtvis något som kallas kontroller. De är komponenter som vanligtvis
är synliga på skärmen och/eller kan manipuleras av användaren med hjälp
av mus eller tangentbord. Ett urval från Java/Swing är:
I
JButton - Klickbar knapp
I
JTextField - Textruta för inmatning av text
I
JLabel - Ettikett för visning av text
(2 september 2015 – F3.7 )
Hantera händelser från kontroller
För att lyssna efter händelser som t.ex. en kontroll myButton ger ifrån sig
skriver man:
myButton.addActionListener(myListener);
Detta signalerar att den angivna lyssnaren ska bli notifierad via metoden
actionPerformed när kontrollen gett upphov till en händelse av något slag.
(2 september 2015 – F3.8 )
Hantera händelser från flera olika kontroller i en lyssnare
En och samma lyssnare kan lyssna efter händelser från mer än en källa.
Detta leder till ett behov av att kunna avgöra vilken kontroll som orsakat
en given händelse.
Java/Swing möjliggör detta genom att ActionEvent-klassen som är
parametern till actionPerformed(ActionEvent e)-metoden håller reda på
vilken kontroll som är källan till händelsen.
Metoden e.getSource() returnerar en referens till det aktuella objektet. På
så vis kan man implementera olika reaktioner på olika händelser.
(2 september 2015 – F3.9 )
Ordna kontroller med rätt Layout
För att bringa ordning i gränssnittet när man lägger till flera kontroller
använder man oftast Layout-systemet. En Layout specificerar ett
regelsystem för hur kontrollerna ska positioneras och dimensioneras i
relation till varandra.
De 2 vanligaste, och de enda som kommer användas i den här kursen, är
FlowLayout och GridLayout.
I
FlowLayout positionerar kontrollerna i följd efter varandra.
I
GridLayout positionerar kontrollerna i ett rutmönster där man anger
antal rader och kolumner.
(2 september 2015 – F3.10 )
Nästa gång
Nästa gång kommer fokus ändras helt då Tom introducerar en viktig
problemlösningsmetod som heter rekursion. Den är en högst central del av
kursen och vi rekommenderar starkt att ni inte missar den föreläsningen.
Hoppas vi ses då!
(2 september 2015 – F3.11 )