Arv och Grafiska Användargränssnitt

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

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

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

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

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

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

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

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

Java-concept och Swing. Swing low, sweet chariot

OOP Objekt-orienterad programmering

Mer om grafiska komponenter. Händelsestyrda program

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

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

OOP Objekt-orienterad programmering

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

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

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

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

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

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

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

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

Enum, mer om Arv, Abstrakta klasser, Polymorfism, Recursion! Förelasning 14!! TDA540 Objektorienterad Programmering!

Lab5 för prgmedcl04 Grafik

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

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

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

Lektion Händelsehanterare

Grafiska användargränssnitt i Java

Laboration 1: Yatzy. 1 Yatzy. 2 Användargränssnitt. Joachim von Hacht

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

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

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äsning 4. Klass. Klassdeklaration. Klasser Och Objekt

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

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

Grafiska användargränssnitt i Java

PROGRAMMERINGSTEKNIK TIN212

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

Laboration 15 Grafiskt användargränssnitt

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

Föreläsning 15: Repetition DVGA02

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

DAT043 - Föreläsning 7

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

Typhierarkier del 1 Gränssnitt, ärvning mellan gränssnitt, ärvning mellan klasser

Projekt 2 XL. Observer-mönstret

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

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

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

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

Kopiering av objekt i Java

OOP Objekt-orienterad programmering

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

DAT043 - föreläsning 8

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

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

Grafiska användargränssnitt i Java

Modeller, Objekt och Klasser

Monday, November 16, Senaste Labben

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

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

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

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

Föreläsning 13 Innehåll

Samlingar, Gränssitt och Programkonstruktion! Förelasning 11!! TDA540 Objektorienterad Programmering!

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

Objektorienterad Programmering (TDDC77)

Exempel på spelprogrammering i java.

OOP Objekt-orienterad programmering

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

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

Classes och Interfaces, Objects och References, Initialization

Konstruktion av klasser med klasser

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

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

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

Subtyping och variance. Objekt-orienterad programmering och design Alex Gerdes, 2018

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

Subtyping, co- och contra-variance. Objekt-orienterad programmering och design Alex Gerdes, 2016

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

Grafiska komponenter.

Föreläsning 10. ADT:er och datastrukturer

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

1 Grafiska komponenter

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

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.

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

Lösningar för tenta 3 DAT043,

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

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

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.

Lösningsförslag till tentamen

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

Klasshierarkier. Klasser kan byggas på redan definierade klasser

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

Repetition av OOP- och Javabegrepp

Transkript:

Arv och Grafiska Användargränssnitt Bildserie 5

Plattform Java är inte bara ett språk utan en s.k. plattform - Förutom språket finns en otrolig mängd färdiga klasser samlade i bibliotek (kallas också API:n, application programming interface) - T.ex. finns klasser för grafiska användargränssnitt, nätverkskommunikation, databaser,. allt..! - Vi kan använda färdiga klasser direkt i våra program t.ex. Scanner - Genom att använda färdiga klasser sparar vi tid och får en högre kvalitet (koden är testad, buggar fixade)

Ett Problem Antag att det finns en färdig klass i Java som nästan skulle kunna gå att använda, men inte riktigt *) Vi vill: - inte skriva om hela klassen (och testa och fixa buggar igen en ingenjör skall vara lat!) - använda det som finns och som passar oss - kunna lägga till sådant som fattas (eller modifiera vissa delar så att de passar) - Lösningen är... *) Kan också vara en egen klass som vi inte vill ändra i

Arv (Inheritance) Genom att skapa en klass och låta denna ärva från någon färdig klass kan vi åstadkomma det vi vill (från föregående bild) - Arv är en generell mekanism, finns i alla OO-språk inte bara Java - Arv fungerar bara med referenstyper (klasser, gränssnitt) inte med primitiva (int, double, ) - Ej heller med String, Integer,... (vissa standard Java klasser går inte att ärva). Kan inte ärva Array.

Arv i Java Vid klassdeklarationen anger vi att klassen ärver (extends) en annan klass - Klassen man ärver ifrån kallas superklass - Klassen som ärver kallas subklass (den som extends) - Allt som inte är private i superklassen kan användas i subklassen, (osynligt men finns där) - Dock inte t.ex. konstruktorn - Finns en speciell modifierare protected som innebär att bara subklasser kan använda metoder/instansvariabler (används inte av oss)

Arv i Java, forts Genom extends får vi tillgång till den existerande koden i superklassen För att modifiera kan vi - Lägga till nya instansvariabler och metoder i subklassen (utöka) - Överskugga (override, ersätta) superklassens metoder i subklassen (på samma sätt som vid gränssnitt) Anm: Man ärver aldrig klasser för samlingar (ArrayList)

Initiering Då vi instansierar en klass anropas automatiskt konstruktorn för att ge oss en möjlighet att initiera objektet - Om vi instansierar en subklass anropas alltid superklassens konstruktor först i subklassens, ger oss möjlighet att initiera delarna från superklassen - Syns inte i koden om enbart default-konstruktorn används (den utan parametrar) - Vill explicit anropa superklassens konstruktor använder vi super(..), först i subklasskonstruktorn

Klassen Object Alla klasser i Java ärver (osynligt) standardklassen java. lang.object (inget extends i koden) - Alla metoder från klassen Object finns alltså i alla objekt - Object:s konstruktor körs alltid Exempel på Object:s metoder; - equals(), (har vi tidigare nämnt) jämför två objektreferenser, true om referenserna refererar samma objekt (alltså identitet) - tostring(), ger en strängrepresentation av objektet (används med System.out.println(), t.ex. vid felsökning)

Arv och Typsystemet Klasser och gränssnitt introducerar nya typer. Samma sak gäller för subklasser? - En subklass introducerar en subtyp Ett objekt av superklasstypen kan alltid bytas ut mot ett objekt av subklasstypen de är typkompatibla - Subklassobjektet kan alltid minst lika mycket som superklassobjektet (den ärver ju allt,... har samma beteende som super eller bättre ) - Tvärtom kan leda till problem och godkänns därför inte av typsystemet

Arv och Typsystemet, forts Givet: Alla klasser ärver Object (är subtyper till Object) Givet: Alla typer är kompatibla med sina supertyper Slutsats: Alla typer är kompatibla med Object // Sub/superclass compatibility Object o = new Tile(); // Ok, Object supertype // Can only call Object s methods for o (that s // what the type system can guarantee, though // in reality o can do more)

Explicit Typomvandling Ibland måste vi typomvandla från supertyp till subtyp (vilket alltså inte godkänns av typsystemet) Vi måste då stänga av type checker:n så att den inte kontrollerar en viss omvandlingen (den rad vi jobbar med) - Görs med explicit typomvandling (casting) - Ansvaret är vårt, vid fel: ClassCastException // Casting Tile t = (Tile) o; //Is o really able to do what Tile can?

Implements och Extends En Java klass kan implementera flera gränssnitt (implements) men bara ärva en klass (extends) - D.v.s. en klass kan uppfylla många kontrakt men bara återanvända kod från en klass (superklassen, som iof kan innehålla saker från sin superklass ) - Våra klasser kommer senare att implementera flera lyssnargränssnitt

Grafiska Användargränssnitt Grafiska användargränssnitt (graphical user interface, GUI) gör det möjligt för användaren att, på ett enkelt sätt, interagera med vår modell - Gränssnittet består av knappar, menyer, o.s.v. - Tidigare (vid testning) såg vi ett kommandoradsanvändargränssnitt (30 bokstäver!) - Ett GUI anses överlägset från ett användarperspektiv - Detta är alltså något helt annat än de grässnitt vi tidigare talat om (en specifikation)

Händelsestyrda program Program med grafiska användargränssnitt är händelsestyrda - De reagerar på händelser (klick, peka på, o.s.v) - Dessa händelser genereras automatisk av operativsystemet - Dessutom informeras Javas händelsesystem automatiskt om vad som hänt (t.ex. dubbelklick på knappen OK ) - Summa: Vår program kommer att ta emot automatiskt levererade GUI-händelser (i form av händelse-objekt)

Lab 1 : Händelsestyrning Yatzy Java Machine Operating System Drivers

GUI Programmering Att programmera GUI:n är icke-trivialt - En subdisciplin till programmering, en specialisering - Kräver detaljkunskaper specifika för området - Fokus för denna kurs är inte GUI:programmering men - den typ av program vi skriver använder ett GUI - det är ganska rolig när man får till det - vissa delar är generella och kan leda till ökad förståelse SUMMA: Vi försöker minimera detta

JFrame För att överhuvudtaget få ett fönster på skärmen måste vi implementera en klass som ärver javax.swing.jframe - För att fönstret skall visas måste vi anropa metoden setvisible(true) (som vi alltså ärver från JFrame) - Normalt sätter vi också en del andra egenskaper, storlek, position på skärmen, titel, vad som händer då fönstret stängs (closeoperation),... - Vi kan dessutom lägga till en meny, menyn hör ihop med fönstret

Komponenter I Java byggs GUI:et upp m.h.a. komponentobjekt (components) t.ex. fönster, knappar, menyer, rullistor,... - Det finns färdiga Java klasser för allt vi behöver, JFrame, JButton, JMenuBar, JPanel, JList,... - Samlade i Swing (...the primary Java GUI widget toolkit ) - Finns äldre toolkit, AWT, används inte för komponenter (däremot i samband med händelser) - Komponenter placeras på paneler - Bilder på komponenter

Paneler Komponenterna ligger alltid på paneler (förutom menyn) - Paneler är subklasser till JPanel (extends JPanel) - Komponenter instansieras vanligen i panelens konstruktor - För att placera ut komponenten måste man anropa panelens add()-metod (som vi också ärver)

LayoutManagers En panels layout ges av en LayoutManager - Vi använder inte absoluta koordinater, blir inte bra, kanske ändrar vi fönstrets storlek, bättre att komponenter anpassar sig, hänger i gummiband LayoutManager vi använder (finns fler ) - FlowLayout, placerar komponenter i rad vänster till höger, en efter en (efter varje add()), byter rad vid behov (den förvalda managern, behöver ej anges ) - GridLayout, ger ett rutmönster med lika stora rutor, varje komponent placeras i en ruta, i kolumner och rader, med start uppe/vänster - BorderLayout, delar upp panelen i Syd, Nord, Väst, Öst och Center. Man anger i vilken del man vill placera komponenten

Lab 1: Konstruktion GUI Sprängskiss på uppbyggnad av GUI Menu mainpanel ButtonPanel MainFrame Button ScorePanel Table DicePanel ToggleButtons

Vanliga Komponenter Vi behöver - JButton, en knapp att klicka på - JToggelButton, en knapp som är på eller av - JTextField, en ruta att skriva i eller skriva ut text i - JLabel, en text att skriva ut (ingen inmatning) Enstaka användning av JDialog, JFileChooser, JCheckbox förkommer, troligvis inget ni behöver koda

Swing och Typsystemet Superklass för alla komponenter i Swing är Component Alla komponenter är typkompatibla med Component // Ok, typecompatible Component c1 = new JTextField(); Component c2 = new JButton(); // Ok // Ok Man kan komma åt en panels alla komponenter med Component[] cs = getcomponents();

Händelsehantering Händelser levereras automatiskt till vårt program i form av händelseobjekt (då vi t.ex. klickar en knapp) Händelseobjekten håller information om vad som hänt, vilken komponent som aktiverades, antal klick, m. m. - Vi använder ofta actioncommand (set/get), en sträng man kan använda för att ange vad som hänt Händelseobjekten kommer att vara inparametrar till speciella lyssnarmetoder ( lyssnare, metoder som tar händelseobjekt som parametrar)

Lyssnargränssnitt Vissa metoder kan fungera som lyssnare (vilken metod som helst duger inte) - Metoderna som kan användas finns deklarerade i lyssnargränssnitt, d.v.s. objekten (klassen) som skall ha lyssnarmetoden skall implementera gränssnittet - Vi använder oftast gränssnitten ActionListener (actionperformed()-metoden ), EventBus. IEventHandler (onevent()-metoden, mer senare) - Enstaka användning av ItemListener (för menyer) och MouseAdapter (för musen) förekommer

Komponent och Lyssnare Klassen som har lyssnarmetoden måste implementera något lyssnargränssnitt Komponenten kan kopplas ihop med objekt av lyssnargränssnittetstypen (t.ex. typen ActionListener) // Connect component and object with listener method // Class of myobject must implement ActionListener button.addactionlistener( myobject );

Muslyssnare Kombinationen JTextField och lyssnarmetoden actionperformed() fungerar bara vid Enter-slag - Musklick kommer inte att hanteras - För att lösa detta måste vi koppla en muslyssnare till textfältet, vi använder en MouseAdapter Gränssnittet vi använder är egentligen MouseListener. Gränssnittet innehåller metoder vi inte behöver men ändå tvingas implementera. MouseAdaptern är en klass som implementerar alla metoder (tomma metodkroppar, metoderna gör inget). Vi skapar en (namnlös) sub-klass till MouseAdapter och överskuggar (override) den enda metod vi behöver, snyggare, mindre jobb...

Slå på och Stänga Man kan slå på och stänga av komponenter JtextField JButton c.setenabled(true) Skapar händelse för Enter Skapar händelse för musklick c.setenabled(false) Ingen händelsehantering Ingen händelsehantering c.seteditable(true) c.seteditable(false) Kan skriva (händelse för Enter) Kan inte skriva (händelse för Enter) Påverkar ej Påverkar ej

Lab 1: Klassen Table Ganska kompliceras, vi går igenom den Finns test, TestTable

Lab 1: Arbetssätt Man kan implementera GUI:et ganska fristående - Huvudfönstret m.m. finns färdig - Implementera lyssnare som bara skriver ut vad som händer (alltså inga anrop till modellen) - Avvakta med anrop GUI->modell och händelser från modell-> GUI tills klassen Yatzy är i implementerad och testad, mer nästa bildserie...