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 )
© Copyright 2024