Programstyrd / händelsestyrd

Relevanta dokument
Händelsestyrda program

Fönsterhantering, grafik

Grafiska program i Java. AWT och Swing? AWT. Swing. JButton. Button

Fortsättningskurs i programmering F 5. GUI händelsehantering - undantagshantering Hugo Quisbert AWT. Paket för hantering av grafik

Frames, menyer och GUI-program

Laboration 15 Grafiskt användargränssnitt

Lektion Händelsehanterare

Mer om grafiska komponenter. Händelsestyrda program

Objektorienterad programmering med Java Swing: Händelser, lyssnare och applets

Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser?

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

ITK:P1 Föreläsning 4. Grafiska gränssnitt i Java. AWT-komponenter

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 7 Erik Nilsson, Institutionen för Datavetenskap, LiU

5 Användargränssnitt. 5.1 AWT och Swing

Arv och polymorfi. Lite terminologi; Basklass eller superklass: En klass som fungerar som bas för vårt arv. Vi skapar nya klasser utifrån den.

Föreläsning 3: Händelsestyrda program och användargränssnitt

Lab5 för prgmedcl04 Grafik

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 00 - juni - 17 Tentamen i Objektorientering och Java Skrivtid 5 h

Omentamen FYTA11 Javaprogrammering

För att hitta filen gå till mappen NetBeansProjects. Välj undermappen med rätt projekt, och sedan undermapp dist. Där ligger.jar-filen.

Laboration 4: Game of Life

Grafiska komponenter.

Föreläsning 10. Mer om grafiska komponenter Händelsestyrda program. Layout Managers

Objektorienterad Programkonstruktion. Föreläsning 3 9 nov 2015

DI-institutionen Sid 1 av 5 Hans-Edy Mårtensson Sten Sundin Micael Karlsson

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Tentamen i Objektorienterad programmering

Föreläsning 10. Mer om grafiska komponenter Händelsestyrda program. Layout Managers. Exempel: FlowLayout. Klassen FlowLayout

GUI Nyckelbeståndsdelar

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag aug - 23 Tentamen i Objektorientering och Java Skrivtid 5 h

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016

Projekt 2 XL. Observer-mönstret

Föreläsning 14: Grafik & mera händelsehantering

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt

LiTHehack? Här? lithehack se koma Tisdagar och torsdagar

2I1049 Föreläsning 8. Grafiska gränssnitt i Java. AWT-komponenter. Grafiska gränssnitt, Java interface och händelsehantering

Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

Föreläsning 13: Swing (GUI), händelser, timer

OOP Objekt-orienterad programmering

Tentamen FYTA11 Javaprogrammering

Modellsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

Tentamen FYTA11 Javaprogrammering

Grafiska användargränsnitt i Java. Föreläsning 7 Innehåll. Använda klasspaketet Swing. Klasspaket i Java. Grafiska användargränsnitt i Java

Föreläsnings 11 - GUI, Händelsestyrda program, MVC

Objektorienterad Programmering DAT043. Föreläsning 5 29/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

OOP Objekt-orienterad programmering

Tentamen Objekt-orienterad programmering med Java, 1DL100 Sommarkurs och distanskurs

Grafiska användargränssitt och händelsehantering

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

Lösningsförslag till tentamen FYTA11 Javaprogrammering

Swing. MER Java Foundation Classes (JFC) Hur lära sig? Vad är farorna. LayoutManagers. Exempel på några av komponenterna

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin Micael Karlsson

Swing. MER Java Foundation Classes (JFC) Vad är farorna. Hur lära sig? LayoutManagers. Exempel på några av komponenterna

Klasshierarkier - repetition

Arv och Grafiska Användargränssnitt

Föreläsning 2, vecka 6: Tillstånd i objektorienterade program (och mera interface)

Properties. Användbara metoder som kan anropas i propertychanged:

Grafiska användargränssnitt i Java

Denna vecka. Idag. Grafiskt användarsnitt. Vi kommer att se

Grafiska användargränssnitt i Java

Exempel på spelprogrammering i java.

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Lösningsförslag tentamen FYTA11 Java

Repetitionsföreläsning 2: Quiz & problemlösning med swing Inget nytt material.

Vad är ett Framework? 2203$ ) UHOlVQLQJ. Hollywood. Frameworks (FW) Frameworks. Konstruktion av fönster, gränssnitt och användning av grafik i Java

Monday, November 16, Senaste Labben

Objektorienterad Programmering DAT043. Föreläsning 6 30/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Objektorienterad programmering i Java. Föreläsning 5 Kort om Java-Applets

Föreläsning 15 (16) Historik (java.awt) Historik (javax.swing) Introduktion till Swing

ITK:P1 Lektion 4. Lektion 4. Lektion 4. Att implementera en spelidé i Java. DSV Peter Mozelius

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Applets med komponenter

Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

Föreläsning 12. Föreläsning 12. Rörliga figurer Klassen Timer Undantag Något om applets. Rörliga appletsfigurer Klassen Timer Undantag

Tentamen. DD2385 Programutvecklingsteknik vt Fredagen den 5 juni 2009 kl Inga hjälpmedel utom penna, sudd och linjal

Högskolan Dalarna sid 1 av 5 Data-avdelningen Hans-Edy Mårtensson

Datalogi I, grundkurs med Java 10p, 2D4112, Tentamen 29 november 2003, svar och lösningar

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

Labbinstruktioner för Java/Swing

Klasshierarkier. Klasser kan byggas på redan definierade klasser

Tentamen i Objektorienterad programmering

Grafiska användargränssnitt i Java

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Malmö högskola 2007/2008 Teknik och samhälle

Lycka till! TENTAMEN: Objektorienterade applikationer. Läs detta! 1 (6) Tentamen

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Grafiska användargränssnitt i Java

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Föreläsning 5-6 Innehåll

DAT043 - Föreläsning 7

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

Konstruktion av klasser med klasser

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Transkript:

Programstyrd / händelsestyrd Jevent - 1 Händelsestyrda program Jevent - 2 Programstyrd exekvering I ett traditionellt program bestämmer programmet när det är dags att läsa indata, programmets exekvering är programstyrd. Händelsestyrd exekvering I ett program med grafiska användargränssnitt styrs exekveringen av de händelser som initieras av användaren Programutveckling För att utveckla ett händelsestyrt program måste man behärska en stor mängd färdigskrivna funktioner i något grafiskt användarbiblotek Händelsestyrda program brukar bestå av två faser. Först genomlöps initieringensfasen. I den initierar man de olika grafiska komponenter som kommer att användas i programmet. Man definierar också s.k. callbackfunktioner som skall ta hand om de händelser man är intresserad av. I Java definieras dessa callback-funktioner som metoder i speciella lyssnare När initieringsfasen är slut går programmet in i väntefasen I väntefasen ligger programmet och väntar på att en yttre händelse skall inträffa 1

Implementering av Lyssnargränssnittet Jevent - 3 En alternativ implementering av Lyssnargränssnittet Jevent - 4 import java.applet.*; import java.applet.*; public class Test extends Applet implements ActionListener private Button ok; public void init() ok = new Button("OK"); ok.addactionlistener(this); add(ok); public class Test extends Applet private Button ok; public void init() ok = new Button("OK"); ok.addactionlistener(new Lyssnare()); add(ok); resultat = new TextField(10); resultat = new TextField(10); //Här definieras en inre klass private class Lyssnare implements ActionListener 2

Att lyssna på händelser Jevent - 5 Händelseklasser Jevent - 6 I Java beskrivs olika händelser med hjälp av händelseklasser EventObject När en händelse inträffar skapas ett objekt av den klass som beskriver händelsen TextEvent AWTEvent ActionEvent Därefter efter anropas en metod i den lyssnare som definieras att lyssna på den typen av händelser ItemEvent ComponentEvent AdjustmentEvent Som parameter till metoden i lyssnaren ges då det skapade händelseobjektet Lyssnarklassen Lyssnargränssnittet WindowEvent PaintEvent FocusEvent ContainerEvent private class Lyssnare implements ActionListener Händelseklassen KeyEvent InputEvent MouseEvent 3

Lyssnarklasser och lyssnargränssnitt Jevent - 7 Namnkonventioner Jevent - 8 För att fånga en händelse måste man skapa en lyssnare som en instans av en lyssnarklass Händelse markerar händelsens namn Lyssnarklassen måste man själv definera Lyssnarklassen måste innehålla de speciella metoder som systemet automatiskt anropar när en händelse inträffar För varje händelseklass finns ett motsvarande lyssnargränssnitt Varje lyssnarklass måste implementera ett av dessa gränssnitt, direkt eller indirekt ok.addhändelselistener(new Lyssnare()); class Lyssnare implements HändelseListner public void actionperformed(händelseevent event) result.settext( OK ); Ett lyssnarobjekt skapas ok.addactionlistener(new Lyssnare()); Lyssnarklassen Lyssnargränssnittet private class Lyssnare implements ActionListener Händelseklassen Metod som hanterar händelsen 4

Jevent - 9 Jevent - 10 Händelser, del 1 Händelser, del 2 Händelseklass Händelser Genereras av ==================================================================== ActionEvent actionperformed Button List MenuItem TextField AdjustmentEvent adjustmentvalue- Scrollbar Changed ItemEvent itemstatechanged Checkbox, CheckboxMenuItem Choise, List ComponentEvent componenthidden Component componentmoved componentresized componentshown ContainerEvent componentadded Container comonentremoved FokusEvent focusgained Component focuslost Händelseklass Händelser Genereras av ==================================================================== WindowEvent windowactivated Window windowclosed windowclosing windowdeactivated windowdeiconified windowiconified windowopened InputEvent se subklasser se subklasser KeyEvent keypressed Component keyreleased keytyped MouseEvent mouseclicked Component mouseentered mouseexited mousepressed mousereleased ---------------------------------------------------------- (*) mousedragged Component mousemoved ---------------------------------------------------------- (*) För de båda händelserna mousedragged och mousemoved är händelseklassen MouseEvent men gränssnittet är inte MouseListener utan MouseMotionListener 5

Att identifiera rätt komponent, getsource() Jevent - 11 Att identifiera rätt komponent, separata lyssnare, del 1 Jevent - 12 public class Test extends Applet private Button ok, ångra, hjälp; public void init() ok = new Button("OK"); ok.addactionlistener(new KnappLyssnare()); add(ok); import java.applet.*; public class Test extends Applet private Button ok, ångra, hjälp; ångra = new Button("ÅNGRA"); ångra.addactionlistener(new KnappLyssnare()); add(ångra); hjälp = new Button("HJÄLP"); hjälp.addactionlistener(new KnappLyssnare()); add(hjälp); resultat = new TextField(10); class KnappLyssnare implements ActionListener if (event.getsource() == ok) if (event.getsource() == ångra) resultat.settext("ångra"); if (event.getsource() == hjälp) resultat.settext("hjälp"); public void init() ok = new Button("OK"); ok.addactionlistener(new OKLyssnare()); add(ok); ångra = new Button("ÅNGRA"); ångra.addactionlistener(new ÅngraLyssnare()); add(ångra); hjälp = new Button("HJÄLP"); hjälp.addactionlistener(new HjälpLyssnare()); add(hjälp); resultat = new TextField(10); 6

Att identifiera rätt komponent, separata lyssnare, del 2 Jevent - 13 Att identifiera rätt komponent, anonyma klasser, del 1 Jevent - 14 class OKLyssnare implements ActionListener class ÅngraLyssnare implements ActionListener resultat.settext("ångra"); import java.applet.*; public class Test extends Applet private Button ok, ångra, hjälp; public void init() ok = new Button("OK"); // Lyssnaren uttrycks här som en anonym klass // Det vill säga en klass utan namn! class HjälpLyssnare implements ActionListener resultat.settext("hjälp"); // Den anonyma klassen implementerar // metoden actionperformed i gränssnittet // ActionListener ok.addactionlistener(new ActionListener() ); add(ok); 7

Att identifiera rätt komponent, anonyma klasser, del 2 Jevent - 15 Adapterklasser, del 1 Jevent - 16 ångra = new Button("ÅNGRA"); ångra.addactionlistener(new ActionListener() resultat.settext("ångra"); ); add(ångra); hjälp = new Button("HJÄLP"); hjälp.addactionlistener(new ActionListener() resultat.settext("hjälp"); ); add(hjälp); resultat = new TextField(10); public class Test extends Applet public void init() addmouselistener(new Lyssnare()); resultat = new TextField(80); private class Lyssnare implements MouseListener public void mouseclicked(mouseevent event) resultat.settext("du klickade: " + event); public void mousepressed(mouseevent event) public void mousereleased(mouseevent event) public void mouseentered(mouseevent event) public void mouseexited(mouseevent event) 8

Jevent - 17 Jevent - 18 Adapterklasser, del 2 Adapterklasser, del 3 import java.applet.*; import java.applet.*; public class Test extends Applet public void init() addmouselistener(new Lyssnare()); resultat = new TextField(80); private class Lyssnare extends MinAdapter public void mouseclicked(mouseevent event) resultat.settext("du klickade: " + event); //-fil: MinAdapter. java --------------------------------- public class MinAdapter implements MouseListener public void mouseclicked(mouseevent event) public void mousepressed(mouseevent event) public void mousereleased(mouseevent event) public void mouseentered(mouseevent event) public void mouseexited(mouseevent event) public class Test extends Applet public void init() addmouselistener(new Lyssnare()); resultat = new TextField(80); // Det finns en adapterklass för varje gränssnitt // som hanterar mer än en typ av händelse private class Lyssnare extends MouseAdapter public void mouseclicked(mouseevent event) resultat.settext("du klickade: " + event); 9

Mushändelser, del 1 Jevent - 19 Mushändelser, del 2 Jevent - 20 public class Test extends Frame private TextField koordinat; private TextField klickningar; public Test() addwindowlistener(new WindowLyssnare()); addmouselistener(new MusLyssnare()); setlayout(new FlowLayout()); koordinat = new TextField("Här kommer koordinaten"); add(koordinat); klickningar = new TextField("Här kommer antalet klickningar"); add(klickningar); setsize(400, 200); setvisible(true); private class WindowLyssnare extends WindowAdapter public void windowclosing(windowevent event) System.exit(0); private class MusLyssnare extends MouseAdapter public void mouseclicked(mouseevent event) int x = event.getx(); int y = event.gety(); int antal = event.getclickcount(); koordinat.settext("koordinat (" + x + ", " + y + ")"); klickningar.settext("antal klickningar: " + antal); private class WindowLyssnare extends WindowAdapter public void windowclosing(windowevent event) System.exit(0); public static void main(string[] argument) Test mintest = new Test(); private class MusLyssnare extends MouseAdapter 1

MouseEvent Jevent - 21 KeyEvent Jevent - 22 getx(), gety() Ger x- respektive y-koordinaten för musens placering getpoint() Ger ett Point-objekt som anger musens placering getclickcount() Anger hur många gånger användaren klickar getcomponent() Ger den grafiska komponent som musen befinner sig i iscontroldown() Anger om användaren tryckt på mittknappen ismetadown() Anger om användaren tryckt på högerknappen isaltdown() Anger om användaren höll Alt-tangenten nere isshiftdown() Anger om användaren höll Shift-tangenten nere getkeycode() Ger tangentnummret (virtual key kode) vid händelser VK_namn En konstant med tangennumret för tangent namn getkeytext(n) Översätter tangentnumret n till text getkeychar() Genererar tecknet (en char) vid händelsen keytyped isaltdown() Anger om användaren höll ner Alt-tangenten iscontroldown() Anger om användaren höll ner Ctrl-tangenten ismetadown() Anger om användaren höll ner Meta-tangenten ishiftdown() Anger om användaren höll ner Shift-tangenten 1

Exempel, KeyEvent, del 1 Jevent - 23 Exempel, KeyEvent, del 2 Jevent - 24 public class Test extends Frame public Test() addwindowlistener(new WindowLyssnare()); addkeylistener(new KnappLyssnare()); setsize(400, 200); setvisible(true); private class WindowLyssnare extends WindowAdapter public void windowclosing(windowevent event) System.exit(0); Utskrift i konsolfönstret G:\java\events>java Test Tangenten F nedtryckt. Tangenten U nedtryckt. Tangenten 7 nedtryckt. Tangenten Shift nedtryckt. Tangenten 3 nedtryckt. Tangenten Back Quote nedtryckt. Tangenten L nedtryckt. Tangenten K nedtryckt. Tangenten J nedtryckt. Tangenten K nedtryckt. Tangenten L nedtryckt. Tangenten Back Quote nedtryckt. Tangenten L nedtryckt. Tangenten Back Quote nedtryckt. private class KnappLyssnare extends KeyAdapter public void keypressed(keyevent event) System.out.println("Tangenten " + KeyEvent.getKeyText(event.getKeyCode()) + " nedtryckt."); public static void main(string[] argument) Test mintest = new Test(); 1