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



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

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

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

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

Mer om grafiska komponenter. Händelsestyrda program

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

OOP Objekt-orienterad programmering

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

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 18

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

OOP Objekt-orienterad programmering

SMD091 Lektion 9. Definition. Inkapsling. Lite repetition. Grafik. Gränssnitt Definition och Implementation. Sammansättning... Implementation.

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

Java-concept och Swing. Swing low, sweet chariot

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

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

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

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

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

Objektorienterad programmering med Java Swing. Programexempel. Swing och AWT AWT. = Abstract windowing toolkit

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

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

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

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

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

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

Arv och Grafiska Användargränssnitt

Laboration 15 Grafiskt användargränssnitt

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

Arv, Grafiska användaregränssnitt och Inre klasser! Förelasning 12!! TDA540 Objektorienterad Programmering!

Lektion Händelsehanterare

Klasshierarkier - repetition

Grafiska komponenter.

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

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

DAT043 - Föreläsning 7

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

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

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

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

5 Användargränssnitt. 5.1 AWT och Swing

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

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

Lab5 för prgmedcl04 Grafik

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

Objektorienterad Programkonstruktion. Föreläsning 6 23 nov 2015

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

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

MVC-mönstret. model-view-control i Swing

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

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)

Projekt 2 XL. Observer-mönstret

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

27. GUI Programming. Java. Summer 2008 Instructor: Dr. Masoud Yaghini

DAT043 - föreläsning 8

Klasshierarkier. Klasser kan byggas på redan definierade klasser

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

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

ITK:P1 Föreläsning 8. Verktyget Javadoc. Kommentarer för Javadoc. Multimedia för spelkonstruktion

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

Lösningsförslag till tentamen

Föreläsningsmaterial (Arv) Skrivet av Andreas Lund

1 Grafiska komponenter

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.

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

Objektorienterad Programmering (TDDC77)

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

Händelsestyrda program

Arv innebär att man skapar en ny klass (subklass) utifrån en redan existerande klass (superklass, basklass).

Rita Egna Bilder, Timer

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

Konstruktion av klasser med klasser

PROGRAMMERINGSTEKNIK TIN212

Föreläsning 10. Paket Synlighet Arkiv. DA129A Programmering 1

Grafiska användargränssnitt i Java

Applets med komponenter

OOP Objekt-orienterad programmering

"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde

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

725G61 - Laboration 8 Ett enkelt GUI. Sahand Sadjadee och Johan Falkenjack

Grafiska användargränssitt och händelsehantering

Ingenjörsfirman Stéen Java Sida 1 av 1

Grafiskt användargränssnitt (GUI-Graphical User Interface) intro Komponenter

Föreläsning 13 Innehåll

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

Tentamen i Objektorienterad programmering

Klasser för grafik och bildhantering

Arvshierarki. Object. Bostadshus. Flerfamiljshus. Villa

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

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

Laboration 4: Game of Life

public interface Skrivbar { void skriv(); } public class Punkt implements Skrivbar { public double x; public double y;

Grafiska användargränssnitt i Java

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

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

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/ Exempel: Implementation av Schackpjäser.

Transkript:

2I1049 Föreläsning 8 Grafiska gränssnitt, Java interface och händelsehantering 1 KTH-MI Peter Mozelius Grafiska gränssnitt i Java Efterfrågan på program med grafiskt gränssnitt har ökat avsevärt de senaste åren I Java finns två parallella komponenthierarkier som gör det enkelt att bygga fungerande GUI:s AWT (Abstract Windowing Toolkit) tungviktskomponenter, plattformsberoende Swing (Infördes som Core Java i ver 1.2) lättviktskomponenter, plattformsoberoende 2 AWT-komponenter Abstract Windowing Toolkit De grafiska komponenter som funnits med sedan den allra första versionen av Java Tungviktskomponenter som samarbetar med operativsystemet där applikationen körs En knapp t ex ser därför annorlunda ut när koden körs i Linux än den gör i Windows Den gemensamma basklassen är Component 3

AWT-komponenter 4 Paketet java.awt awt package kan delas i tre delar: KOMPONENTER: knappar, textrutor... GRAFIK: bilder, fonter, färger LAYOUTMODELLER (Layout Managers) Separata paket för bl a: Händelsehantering: java.awt.event Bildhantering: java.awt.image Drag n Drop: java.awt.dnd 5 Swing-komponenter På mångas begäran så utökades Java sedan med Swing i JDK 1.2 Swing var från början ett samarbete mellan bl a Sun, IBM och Netscape En del komponenter har sitt urprung i Netscapes Internet Foundation Classes Komponenter som ser likadana ut oberoende av plattform och OS Lättviktskomponeter 6

Swing-komponenter Swing består av 9st delpaket och en mängd klasser och interface Grundpaketet heter javax.swing.* import javax.swing.*; AWT utgår från klassen Component Swing utgår från JComponent Button blir JButton Label blir JLabel 7 Swing-komponenter Ett bra sätt att få en liten inblick i det som går att göra med Swing-komponenter är att ta sig till: X:\j2sdk1.4\demo\jfc\SwingSet2\ och sedan klicka upp SwingSet2Plugin.html JFC = Java Foundation Classes Innehåller AWT, Swing, Java 2D, Printing mm 8 Model - View Från början Model View Controller MVC Det viktigaste och det som finns i Swing är att genom separeringen av Model View skilja mellan logiken (Model) och gränssnittet (View) Controller = uppdatering Paus 15 min! 9

Java interface interface - gränssnitt Ett interface innehåller abstrakta metoder Ett interface ärvs därför inte utan det implementeras public class TV implements Fjärrkontroll I interfacet Fjärrkontroll finns metoder deklarerade som sedan måste implementeras i klassen TV Exempel: public void bytkanal(int kanal) 10 Java interface Java stödjer inte multipelt arv En klass kan implementera flera interface En samling metoder och konstanter (static final) som inte naturligt passar in i en arvhierarki Vi kommer på denna kurs enbart att använda färdiga interface från java.awt.event javax.swing.event 11 Händelser En sorts objekt i Java är händelseobjekt som hjälper till med kommunikationen mellan andra objekt när en händelse inträffar Olika händelseobjekt - event object är specialiseringar av basklassen java.util.event De händelser som skapar händelseobjekt behöver avlyssnas - händelselyssning 12

Händelselyssnare En klass som kan fånga händelser är en lyssnarklass med särskilda metoder som systemet anropar när händelser inträffar Till vår hjälp har vi lyssnargränssnitt som t ex: MouseEvent - MouseListener WindowEvent WindowListener ListSelectionEvent - ListSelectionListener 13 Händelselyssnare Den händelse vi kommer att använda mest är av klassen ActionEvent Interfacet heter ActionListener och i en klass kan inledas enligt: public class A extends JFrame implements ActionListener { Vi kan sedan fånga händelser från komponenter som (J)Button och (J)TextField 14 Händelselyssnare Den metod som sedan behöver implementeras är actionperformed: public void actionperformed(actionevent e) { Lite smart kod; }//actionperformed Lyssnaren behöver slutligen även registreras knapp1.addactionlistener(this); knapp2.addactionlistener(this); RAST? 15

AWT-layoutmodeller Implementeras i kontainerklassen genom: setlayout(layoutklass); Olika layoutklasser i AWT: BorderLayout CardLayout FlowLayout GridLayout GridBagLayout 16 AWT-layoutmodeller Defaultmodellen för många komponenter är BorderLayout som explicit sätts genom: setlayout(new BorderLayout()); North West Center East 17 South AWT-layoutmodeller Fem stycken knappar utplacerade enligt BorderLayout 18

AWT-layoutmodeller java.awt.flowlayout Lägger ut dina komponenter i rader som ord i en ordbehandlare med konstanterna CENTER LEFT RIGHT Reglera avstånd ihöjd och sidled med sethgap() och setvgap() Mycket lätt att använda Känslig för storleksändringar av fönstret Default för Panel-objekt 19 AWT-layoutmodeller java.awt.gridlayout Arbeta med rader och kolumner m h a: setrows() setcolumns() Lägger komponenterna i ett rutnät Alla komponenter blir lika stora Statiskt och rätt fyrkantigt Lätt att använda 20 AWT-layoutmodeller panel = new JPanel(); panel.setlayout( new GridLayout(4,4)); add( Center,panel); 21

AWT-layoutmodeller java.awt.gridbaglayout Med ett rutnät i grunden men med möjligheter till positionering och storleksförändring i med hjälpklassen GridBagConstraints Elegant, flexibel modell men lite krånglig Träna först med någon annan LayoutManager 22 Swing-layoutmodeller Swing-komponenter stödjer alla AWT:s layout-modeller + 6 st nya : BoxLayout, JRootPane.RootLayout OverlayLayout, ViewportLayout SpringLayout och ScrollPaneLayout Mest användbara är: BoxLayout OverlayLayout 23 Repetition från Föreläsning1 På förra årets kurs var det flera studenter som tyckte att det absolut svåraste på kursen var: Överskuggning Polymorfism Dynamisk bindning Vi kör därför en repetition av dessa viktiga begrepp. Ni som redan förstått hur det hänger ihop behöver inte stanna. 24

Polymorfism polymorfism = mångformighet I en klasshierarki kan det i de olika klasserna finnas metoder med samma namn och samma argument/returtyp MEN med olika metodkroppar Objektorienterade språk har inbyggda mekanismer för dynamisk bindning Rätt metod körs automatiskt när programmet exekveras 25 Polymorfism I en abstrakt basklass: public abstract class Figur Finns det en abstrakt metod: public abstract double visaarea(); 26 I den ärvande klassen Rektangel: public class Rektangel extends Figur har metoden formats så att den passar för att räkna ut arean hos just en rektangel Polymorfism I klassen Rektangel: public double visaarea() { return bredd * höjd; }//visaarea i klassen Rektangel Medan den i klassen Cirkel överskuggas enligt: public double visaarea() { return PI * radie * radie; }//visaarea i klassen Cirkel 27

Överskuggning När en eller flera av superklassens instansmetoder omdefinieras i en eller flera subklasser Vid exekveringen så är det objektets klass som avgör vilken metod som anropas Olika objekt i en klasshierarki kan på detta sätt behandlas enhetligt utan att varje enskilt objekt måste klassbestämmas Att rätt metod automatiskt anropas under programkörningen kallas dynamisk bindning 28 Dynamisk bindning i Java Om en instansmetod metod anropas via referensen ref enligt: ref.metod(); Så undersöker javainterpretatorn vilken klass objektet har som ref refererar till Om objektets klass har en passande metod() så körs denna Om inte, så letar javatolken vidare uppåt bland superklasserna tills en metod återfinns 29 Tack för idag! I slutet på nästa föreläsning tänkte jag att vi även skulle hinna med att prata lite om vad som varit bra och dåligt på årets 2I104930 Tack för idag! 30