Händelsestyrda program



Relevanta dokument
Programstyrd / händelsestyrd

Fönsterhantering, grafik

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

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

Frames, menyer och GUI-program

Laboration 15 Grafiskt användargränssnitt

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

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

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

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

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

Mer om grafiska komponenter. Händelsestyrda program

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.

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

Grafiska komponenter.

Omentamen FYTA11 Javaprogrammering

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

Lab5 för prgmedcl04 Grafik

Lektion Händelsehanterare

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

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

Projekt 2 XL. Observer-mönstret

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

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

GUI Nyckelbeståndsdelar

Tentamen i Objektorienterad programmering

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

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

Tentamen i Objektorienterad programmering

Tentamen FYTA11 Javaprogrammering

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

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

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

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

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

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

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

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

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

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

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

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

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

OOP Objekt-orienterad programmering

Lösningsförslag till tentamen FYTA11 Javaprogrammering

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Lösningsförslag tentamen FYTA11 Java

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

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

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

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

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

Grafiska användargränssitt och händelsehantering

OOP Objekt-orienterad programmering

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

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

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

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

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

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

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

Tentamen OOP

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

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.

Exempel på spelprogrammering i java.

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

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

Klasshierarkier - repetition

Labbinstruktioner för Java/Swing

Klasshierarkier. Klasser kan byggas på redan definierade klasser

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

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

Objektorienterad programmering Föreläsning 15. Grafiska användargränssnitt (GUI Graphical User Interface)

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

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

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

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

Grafiska användargränssnitt i Java

Introduktion till arv

Grafiska användargränssnitt i Java

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

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

Grafiska användargränssnitt i Java

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

Konstruktion av klasser med klasser

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

Editering, Kompilering och Exekvering av Javaprogram

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

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

Applets med komponenter

OOP Objekt-orienterad programmering

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

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

Monday, November 16, Senaste Labben

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

Transkript:

JavaD- 1 Program- eller händelsestyrd exekvering Händelsestyrda program JavaD- 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 Exekveringen av händelsestyrda program består av två faser. 1. I initieringsfasen initierar man de olika grafiska komponenter som kommer att användas i programmet. Man definierar även s.k. callbackfunktioner som skall ta hand om de händelser man är intresserad av. I Java (JDK 1.1) implementeras dessa funktioner som lyssnarmetoder i speciella lyssnargränssnitt (JDK 1.0 har en gammal modell för händelsehantering utan speciella lyssnare) 2. I väntefasen ligger programmet sedan och väntar på att en yttre händelse, t.ex. ett musklick, skall inträffa. När händelsen inträffar anropas i Java den lyssnarmetod som hanterar händelsen 1

Enkel implementering av lyssnargränssnitt JavaD- 3 JavaD- 4 Implementering av lyssnargränssnitt i inre klass 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); Lyssnargränssnittet implementeras i klassen Test 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.settext("ok"); resultat = new TextField(10); Lyssnargränssnittet implementeras i inre klassen Lyssnare private class Lyssnare implements ActionListener resultat.settext("ok"); 2

Att generera händelser JavaD- 5 Händelseklasser JavaD- 6 1. I Java representeras olika händelser av händelseklasser. När en händelse inträffar skapar händelsekällan, den komponent som genererar händelsen, ett händelseobjekt som representerar händelsen 2. Därefter efter anropas automatiskt en lyssnarmetod i det lyssnarobjekt som är kopplad till händelsen Som parameter till lyssnarmetoden ges det skapade händelseobjektet TextEvent ItemEvent EventObject AWTEvent ActionEvent AdjustmentEvent Händelsekälla new Anropar lyssnarmetod WindowEvent ComponentEvent ContainerEvent Händelseobjekt Lyssnarobjekt PaintEvent FocusEvent Lyssnarklassen InputEvent private class MyListener implements ActionListener resultat.settext("ok"); Händelseklassen KeyEvent MouseEvent 3

Att lyssna på händelser JavaD- 7 Händelser, del 1 JavaD- 8 1. För att fånga en händelse definierar man en lyssnarklass som implementerar de speciella lyssnarmetoder i ett lyssnargränssnitt som motsvarar den aktuella händelseklassen 2. Ett lyssnarobjekt skapas och registreras att lyssna på den komponent som utgör händelsekällan När en händelse inträffar anropas automatiskt den lyssnarmetod som motsvarar händelsen ok.addactionlistener(new Lyssnare()); Lyssnarklass Ett lyssnarobjekt skapas Lyssnargränssnitt private class Lyssnare implements ActionListener public void actionperformed (ActionEvent event) resultat.settext("ok"); Lyssnarmetod Händelseklass 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 FocusEvent focusgained Component focuslost 4

Händelser, del 2 JavaD- 9 Namnkonventioner för lyssnare JavaD- 10 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 ---------------------------------------------------------- Namnet på lyssnargränssnittet samt metoden för att registrera en lyssnare till en komponent har sina motsvarigheter i namnet på händelseklassen. I formen nedan markerar <xxx> namnet på händelseklassen ok.add<xxx>listener(new Lyssnare()); class Lyssnare implements <xxx>listener public void actionperformed(< xxx>event event) result.settext( OK ); (*) För de båda händelserna mousedragged och mousemoved är händelseklassen MouseEvent men gränssnittet är inte MouseListener utan MouseMotionListener 5

Identifiera komponent med gemensam lyssnare JavaD- 11 Identifiera komponent, separata lyssnare, del 1 JavaD- 12 public class Test extends Applet private Button ok, ångra, hjälp; import java.applet.*; public void init() ok = new Button("OK"); ok.addactionlistener(new KnappLyssnare()); add(ok); 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 public void actionperformed( ActionEvent event) if (event.getsource() == ok ) resultat.settext("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

Identifiera komponent, separata lyssnare, del 2 JavaD- 13 Identifiera komponent, anonyma klasser, del 1 JavaD- 14 class OKLyssnare implements ActionListener resultat.settext("ok"); 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() resultat.settext("ok"); ); add(ok); 7

Identifiera komponent, anonyma klasser, del 2 JavaD- 15 JavaD- 16 Lyssnargränssnitt med flera metoder å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

Egendefinierad adapterklass JavaD- 17 Fördefinierad adapterklass JavaD- 18 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 JavaD- 19 Mushändelser, del 2 JavaD- 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 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); public static void main(string[] argument) Test mintest = new Test(); private class WindowLyssnare extends WindowAdapter public void windowclosing(windowevent event) System.exit(0); private class MusLyssnare extends MouseAdapter 10

MouseEvent-metoder JavaD- 21 KeyEvent-metoder JavaD- 22 För händelseklassen MouseEvent kan följande metoder användas för att få reda på mer info om den inträffade mushändelsen. 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(), ismetadown(), Anger om användaren tryckt på mittknappen, repektive högerknappen isshiftdown(), isaltdown() Anger om användaren höll Alt-tangenten resepektive Shift-tangenten nere För händelseklassen KeyEvent kan följande metoder användas för att få reda på mer info om den inträffade tangentbordshändelsen. 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(), iscontroldown(), ismetadown(), ishiftdown() Anger om användaren höll ner Alt-tangenten, Ctrltangenten, Meta-tangenten respektive Shifttangenten 11

Exempel, KeyEvent, del 1 JavaD- 23 Exempel, KeyEvent, del 2 JavaD- 24 public class Test extends Frame public Test() addwindowlistener(new WindowLyssnare()); addkeylistener(new TangentLyssnare()); 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 TangentLyssnare 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(); 12