Klasser för grafik och bildhantering

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

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

Undantag. Engelska: exceptions. Skansholm: exceptionella händelser

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

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

Grafiska användargränssnitt i Java

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 Programkonstruktion. Föreläsning 3 7 nov 2016

Grafiska användargränssnitt i Java

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

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

OOP Objekt-orienterad programmering

Lab5 för prgmedcl04 Grafik

Grafiska komponenter.

OOP Objekt-orienterad programmering

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

GUI Nyckelbeståndsdelar

Arv och Grafiska Användargränssnitt

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

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

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

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

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

Java Direkt, upplaga 5 Innehåll

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

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

Arvshierarki. Object. Bostadshus. Flerfamiljshus. Villa

Mer om grafiska komponenter. Händelsestyrda program

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

Grafiska användargränssnitt i Java

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

Inre klasser Anonyma klasser Kloning I/O-ramverket. anonyma klasser

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

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

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

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

Ingenjörsfirman Stéen Java Sida 1 av 1

Lektion Händelsehanterare

Händelsestyrda program

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 5. Laboration 4 Lådplanering Exempel på grafik, ett avancerat program Frågor

Laboration 15 Grafiskt användargränssnitt

1 Grafiska komponenter

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

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

Undantagshantering. Fördjupad Java. Fel. Undantag. Fånga Undantag. Grupper av Undantag

Java Direkt, upplaga 7 Innehåll

Undantagshantering. Fördjupad Java. Undantag. Fel. Grupper av Undantag. Fånga Undantag

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 8 - del 2: Objektorienterad programmering - avancerat

Föreläsning 7. Grafiska användargränssnitt

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

Java Direkt, upplaga 6 Innehåll

Grafiska användargränssitt och händelsehantering

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Arv. Grafiska komponenter. Arv. Arvhierarki. Arv. Föreläsning 12 (OH-bilder 9)

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

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

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

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

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

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

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

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

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

PROGRAMMERINGSTEKNIK TIN212

Java-concept och Swing. Swing low, sweet chariot

Fördjupad Java. Undantagshantering. Fel

Mobila applikationer. Mobil applikationer. Java ME. Konfigurationer. Grunderna i ME

F2 Java I/O - strömmar Meddelandesändning med TCP

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

Laboration 3 GUI-programmering

Design och konstruktion av grafiska gränssnitt

Föreläsning 9. Arv Grafiska komponenter

Frames, menyer och GUI-program

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

Tentamen FYTA11 Javaprogrammering

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

Föreläsning 15: Repetition DVGA02

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

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

OOP Objekt-orienterad programmering

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

Java Direkt, upplaga 8 Innehåll

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

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

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

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

Föreläsning 11 Aktiva objekt och trådar, strömmar, kommunikation DAT043,

Klassen javax.swing.timer

Starta ett fönster... Hur håller tkinter reda på musklick? Olika sätt att organisera fönsterinnehåll. Och för att placera våra widgets

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

Klasshierarkier - repetition

DAT043 - föreläsning 8

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

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

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

Tentamen , Grundläggande programmering i Java

Transkript:

Swing och AWT Fem typer av klasser GUI-komponenter Layout-hanterare Händelser och händelselyssnare Klasser för grafik och bildhantering Objectorienterad programmering Sida 1

AWT AWT = Abstract windowing toolkit använder värddatorns fönstersystem (och ärver därigenom look and feel ) En minsta gemensam nämnare tillåter bara de operationer som definieras i samtliga fönstersystem (Windows, Mac, Unix...) Man kan till exempel inte ha en knapp med en bild. Objectorienterad programmering Sida 2

Swing och AWT (forts) Swing: Helt skrivet i Java Swing definierar motsvarigheter till nästan alla AWTs komponenter + några klasser till Klasserna i Swing ärver från klasser i AWT Swing definierar sitt eget utseende. Man kan välja look and feel oberoende av värddator. Objectorienterad programmering Sida 3

Grafiska användarinterface (GUI) Vad består ett GUI av? En pekare pil som styrs av användaren. fönster och ikoner som skapas av en applikation. Diverse komponenter, till exempel knappar, skjutreglage, textfält, bilder Användaren kommunicerar med fönstersystemet via klick och musrörelser. Användaren kan tex flytta omkring fönster på skärmen påverkar ej applikationen. Objectorienterad programmering Sida 4

Användaren kan kommunicera med programmet genom att göra val på menyer, klicka på knappar, fylla i textrutor etc. Varje operation som användaren utför kan få programmet att göra olika saker. Viktig aspekt: Användaren bestämmer i vilken ordning olika operationer ska utföras (i motsats till ett textorienterat interface). Objectorienterad programmering Sida 5

Design av ett GUI: Två problem Presentera information från programmet Ta emot information från användaren (musrörelser, klickningar och tangenttryckningar) Objectorienterad programmering Sida 6

Komponenter i AWT Component Button TextComponent Checkbox Container Label List Scrollbar Canvas TextArea TextField Panel Window ScrollPane Applet Dialog Frame Objectorienterad programmering Sida 7

Komponenter i Swing Container(AWT) JComponent... JSlider JScrollBar JScrollPane JTextComponent AbstractButton JPanel JLabel JEditorPane JTextArea JTextField JToggleButton JButton JRadioButton JCheckBox Objectorienterad programmering Sida 8

Komponenter i Swing (forts) Window(AWT) Applet(AWT) Frame(AWT) Dialog(AWT) JWindow JFrame JDialog JApplet Objectorienterad programmering Sida 9

Klassen Component Klassen Component har metoder för Uppritning: paint(graphics), update(graphics), repaint() Händelsehantering (senare föreläsning) Egenskaper: färg - setforeground(color),..., typsnitt - setfont(font), Font getfont() storlek - setsize(int w, int h),... position - setlocation(int x, int y),..., Objectorienterad programmering Sida 10

Om AWT och Swing (forts) Vissa av klasserna svarar mot igenkännbara komponenter, tex Frame, JFrame ett fönster (med kanter och titelrad) Dialog, JDialog ett dialogfönster för tillfälliga meddelanden Button, JButton klickbara knappar CheckBox, JCheckBox en ruta som användaren markerar för att göra ett visst val Label, JLabel en enkel text eller bild Objectorienterad programmering Sida 11

Om AWT och Swing (forts) Andra klasser beskriver interna strukturer som inte är direkt synliga för användaren, tex Component Se ovan Container Beskriver vanligen en yta som andra komponenter kan placeras på. JWindow ett fristående fönster på skärmen, utan kanter och titelrad. JComponent Superklassen för (nästan) alla komponenter i Swing. Motsvarar klasserna Component och Container i Objectorienterad programmering Sida 12

AWT. Förutom funktionaliteten från Component och Container hanterar JComponent ramar, tips (en slags hjälpfunktioner), hantering av tangenttryckningar. JPanel En rektangulär yta på skärmen. Beskriver en del av ett fönster. Man kan använda ett system av JPanel-objekt för att beskriva en komplicerad layout. JScrollPane Rymmer en enda komponent. Om storleken för den komponent som lagras är större än JScrollPane-objektet, adderas skjutreglage så att man kan se hela objektet. Objectorienterad programmering Sida 13

Några hjälpklasser Dimension Höjd och bredd Color Färg Font Olika typsnitt, tex new Font... Border Ramar Graphics Ett slags ritverktyg som skickas som parameter till metoder som ritar upp en komponent Layout Beskriver hur komponenter ska placeras på en yta Objectorienterad programmering Sida 14

En närmare titt på Container, JComponent och JWindow Förenklad klassstruktur Container JComponent JFrame,JWindow JDialog, JInternalFrame [Diverse verktyg och skrivytor] Objectorienterad programmering Sida 15

Container En container kan innehålla andra komponenter (barnkomponenter). Motsats: föräldrakomponenter add(x) adderar en komponent add(n, x) för att placera komponent vid viss position remove(x) för att ta bort getparent() för att ta fram föräldern Objectorienterad programmering Sida 16

Container (forts) För att placera en komponent b i ett fönster w (tex JFrame), skriv w.getcontentpane().add(b) getcontentpane plockar fram en särskild arbetsyta. Objectorienterad programmering Sida 17

Container: Utseende En mängd metoder, tex background(color), getbackground() setforeground(color), getforeground() setfont(font), getfont() setborder(border), getborder() Objectorienterad programmering Sida 18

Container: Layout I stället för att använda (tex) koordinater, låt en layouthanterare placera ut komponenterna. Ger en design som fungerar bra på olika typer av skärmar, om användaren ändrar storlek etc. BorderLayout FlowLayout GridLayout BoxLayout cardlayout Objectorienterad programmering Sida 19

Layout: exempel c.setlayout(new BorderLayout()) bestämmer layoutstrategi för en container. För att placera nåt på den övre delen, skriv c.add("north",...); Program: VisaBorderLayout.java, VisaBorderLayout2.java, VisaBorderLayout2.java Objectorienterad programmering Sida 20

Exempel: Kalkylator En kalkylator består av två delar; ett sifferfönster och en knappsats. Konstruera knappsatsen med gridlayout och placera sifferfönstret och knappsatsen med borderlayout. Programexempel: Kalk.java Liknar en kalkylator, men designen är inte helt lyckad. Försök 2, med snyggare knappar. kalk2.java Objectorienterad programmering Sida 21

Interaktion Användaren kommunicerar med fönstersystemet via klick och musrörelser. Varje operation som användaren utför kan få programmet att göra olika saker. Viktig aspekt: Användaren bestämmer i vilken ordning olika operationer ska utföras (i motsats till ett textorienterat interface). Hur tar programmet emot interaktion från användaren? Objectorienterad programmering Sida 22

GUI: Typiska klasser och interface för interaktion AWTEvent Abstrakt klass. Representerar en händelse. ActionEvent Subklass till AWTEvent. Denna brukar genereras vid knapptryckningar etc. (knapp = klassen Button) ActionListener Interface. En klass som hanterar ActionEvents måste implementera detta gränssnitt. MouseListener Interface. Används om man vill fånga upp mushändelser direkt. MouseAdapter Abstrakt klass. Implementerar MouseListener. Definierar tomma metoder för alla metoder i MouseListener. Objectorienterad programmering Sida 23

Scenario för enkel interaktion Användaren klickar på ett fönster Händelsen representeras med ett objekt i klassen AWTEvent Swing tar reda på motsvarande komponent genom en sökning i trädet av komponenter och anropar dess händelselyssnare med händelsen som argument. Den anropade metoden tolkar händelsen genom att utföra önskade operationer och om fönstrets utseende ändrats, anropar repaint() Objectorienterad programmering Sida 24

Händelser Olika typer av händelser, tex MouseEvent e.getx(), e.gety() ger koordinater e.clickcount() antal musklick e.getcomponent() ger den komponent som musen befinner sig i. Objectorienterad programmering Sida 25

Olika typer av händelser (forts) KeyEvent (tangenttryckning) e.getkeycode() vilken tangent e.getkeychar() vilket tecken e.getcomponent() Objectorienterad programmering Sida 26

Händelser: ett enkelt exempel Program: HandelseTest.java, MouseTest.java Objectorienterad programmering Sida 27

Exempel: Kalkylator Utöka kalkylatorexemplet (från tidigare föreläsning) så att man kan räkna på den! Vad behöver göras? Snygga upp designen. Skriv händelselyssnare som talar om vad knapparna gör. Definiera motsvarande operationer i kalkylatorn. Objectorienterad programmering Sida 28

Kalkylatorexemplet Idéer: Bygg en separat klasshierarki för de olika knapparna. Undvik allt för tät koppling mellan knapparna och kalkylatorn. Definiera knapparna utanför kalkylatorn. Objectorienterad programmering Sida 29

Knappar: Klasshierarki Knapp Abstrakt klass, superklass för övriga knappar SifferKnapp Ärver av Knapp. Varje instans av klassen svarar mot en siffertangent. OpKnapp Abstrakt klass. Superklass för +*-/= PlusKnapp Plustangent. [Och så vidare] Program: Kalk3.java, Kalk4.java Objectorienterad programmering Sida 30

Exempel: Ett enkelt ritprogram Program: Prickar.java Objectorienterad programmering Sida 31

Prickar: Kommentarer Notera: Interface MouseListener kräver att ett antal metoder för olika mushändelser definieras. Dessa har egentligen inte så mycket med vårt problem att göra. Klassen MouseAdapter implementerar MouseListener och definierar alla metoder (med tom kropp). Genom att ärva från MouseAdapter slipper man definiera en massa metoder som man ändå inte använder. Objectorienterad programmering Sida 32

Strömmar och IO Strömmar InputStream OutputStream Läser och skriver strömmar av bytes. Reader Writer Läser och skriver strömmar av char (Unicode). Objectorienterad programmering Sida 33

Klassen InputStream, några metoder int read() int read(byte[] buffer) long skip(long n) void close () läser en byte (-1 om strömmen slut) läser bytes in i en buffer skippar (högst) n byte, returnera hur mång stäng strömmen Objectorienterad programmering Sida 34

Klassen Reader int read() int read(char[] buffer) long skip(long n) void close () läser ett tecken läser in tecken i en buffer skippar (högst) n tecken. stäng strömmen Objectorienterad programmering Sida 35

Klassen OutputStream void flush() void close() void write(int b) void write(byte [] b) tömmer alla buffrar och ser till att utskriften når sitt mål stänger strömmen skriver en byte skriver en array av bytes Objectorienterad programmering Sida 36

Exempel Inläsning från terminalfönster Utskrift till fil Läs in fil... 1. med InputStream 2. med Reader 3. med try-catch 4. med BufferedReader Objectorienterad programmering Sida 37

Exempel: FilterReader Definiera egna filter (Finns motsvarande för de antra tre typerna av strömmar) En abstrakt klass, ärver Reader En konstruktor, som tar Reader som argument Objectorienterad programmering Sida 38

Egna filter (forts) En protected instansvariabel in (den ström som filtreras) samma metoder som Reader För att konvertera från stora till små bokstäver räcker det om man definierar ett filter som överskuggar (overrides) metoderna för läsning. ToLowerCaseReader.java, UpperToLower.java Objectorienterad programmering Sida 39

Andra filter BufferedReader(Reader in) BufferedWriter(Writer out) LineNumberReader(Reader in) PushbackReader(Reader in) Objectorienterad programmering Sida 40

Andra strömmar DataInputStream(InputStream is) Läser olika datatyper, tex readboolean() readchar() readint() DataOutputStream(OutputStream is) Skriver primitiva datatyper, tex writeboolean(boolean b), writechar(char c), writeint(int i) new PipedInputStream() new PipedOutputStream(PipedInputStream p) kopplar ihop två strömmar Objectorienterad programmering Sida 41

Andra strömmar (forts) ObjectInputStream(InputStream in) Läser godtyckliga objekt! ObjectOutputStream(OutputStream in) Skriver godtyckliga objekt! Objectorienterad programmering Sida 42

Serialisering Klasserna ObjectInputStream och ObjectOutputStream kan användas för att läsa och skriva (nästan) vilka objekt som helst. Operationer: void writeobject(object o) skriver ett objekt Object readobject() läser ett objekt Objectorienterad programmering Sida 43

Serialisering (forts) Krav: readobject och writeobject kräver att objektet tillhör en klass som implementerar interfacet Serializable Om in och out är av klasserna InputStream och OutputStream, skriv ObjectInputStream sin = new ObjectInputStream(in); ObjectOutputStream sout = new ObjectOutputStream(out); för att skapa strömmar som kan läsa och skriva objekt. Exempel: SeriTest1.java, SeriTest2.java Objectorienterad programmering Sida 44

Plattformsoberoende Lite om Unicode Mål: kunna koda alla världens språk (inklusive utdöda) en char är 16 bitar (= 65536 tecken). Nån som tror att det räcker? Objectorienterad programmering Sida 45

Unicode (forts) Unicode kan representera mer än en miljon tecken minsta datatypen i Java som kodar alla tecken är int. För att slippa använda 32 bitar för varje tecken använder man olika avkodningar (encodings), tex UTF-8, UTF-16, UTF-16BE, UTF16LE, UTF-32 Dessa kodar unicode till en sekvens av bytes, 16-bitars ord eller 32-bitars ord. Objectorienterad programmering Sida 46

Unicode (forts) Det finns också ofullständiga avkodningar. Java-system kan generera utskrift till följande format: US-ASCII och ISO-8859-1. Under Unix är ISO-8859-1 default. Genom optionen -encoding kan man även styra vilken kodning kompilatorn använder. (Exempel) Objectorienterad programmering Sida 47

Unitest, provkörning harpo$ java5 Unitest får us-ascii [66, 3f, 72] harpo$ java5 Unitest får iso-8859-1 [66, e5, 72] harpo$ java5 Unitest får utf-8 [66, c3, a5, 72] harpo$ java5 Unitest får utf-16 [fe, ff, 0, 66, 0, e5, 0, 72] harpo$ java5 Unitest får utf-16le [66, 0, e5, 0, 72, 0] harpo$ java5 Unitest får utf-32 Exception in thread "main" java.io.unsupportedencodingexception: utf-32 Objectorienterad programmering Sida 48