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



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

Grafiska komponenter.

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

Lab5 för prgmedcl04 Grafik

Frames, menyer och GUI-program

Händelsestyrda program

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

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

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

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

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

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

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

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

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

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

Laboration 15 Grafiskt användargränssnitt

OOP Objekt-orienterad programmering

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Mer om grafiska komponenter. Händelsestyrda program

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

OOP Objekt-orienterad programmering

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

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

OOP Objekt-orienterad programmering

Övningar Dag 2 En första klass

5 Användargränssnitt. 5.1 AWT och Swing

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

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

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

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

Tentamen OOP

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

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

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

Tentamen i Objektorienterad programmering

Tentamen. Grundläggande programmering i Java A 5p, DTAA

Programmering A C# VT Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson

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

Java-concept och Swing. Swing low, sweet chariot

Objektorienterad programmering D2

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

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

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

kl

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

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

Grundläggande programmering med C# 7,5 högskolepoäng

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

Lösningsförslag, tentamen FYTA11 Javaprogrammering

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.

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

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

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

Laboration 24 Databasen MySQL och java

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 14

Lösningar för tenta 3 DAT043,

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

Lösningsförslag till tentamen

Tentamen. Lösningsförslag

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

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Objektorienterad programmering i Java

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

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

Laboration 13, Arrayer och objekt

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

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

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

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

Administrativt. Programmeringsteknik för I1. Dagens program. Objektorienterad programmering

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

Redovisning av inlämningsuppgifter

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Introduktion till arv

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

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

PROGRAMMERINGSTEKNIK TIN212

Objektsamlingar i Java

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

Rita Egna Bilder, Timer

Föreläsning 7. Träd och binära sökträd

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

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

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

2I1073 Lektion 2. Lektion 2a. Lektion 2a. Servlets, säkerhet, och filhantering. import java.io.*; import javax.servlet.*; import javax.servlet.http.

Lösningsförslag till tentamen

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

DAT043 Objektorienterad Programmering

Laboration 4: Game of Life

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

Tentamen i Objektorienterad programmering

Programstyrd / händelsestyrd

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

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

Laboration 1 - Grunderna för OOP i Java

Transkript:

Programmeringsteknik och Matlab Övning 6 Dagens program Övningsgrupp 2 (Sal Q22/E32) Johannes Hjorth hjorth@nada.kth.se Rum 4538 på plan 5 i D-huset 08-790 69 02 Kurshemsida: http://www.nada.kth.se/kurser/kth/2d1312 Kan vi bygga vidare på existerande klasser? Kort introduktion till arv Hur hittar vi information om inbyggda klasser? J-uppgiften är inte alls lika styrd som tidigare labbar Hur visar vi grafik på skärmen? Ett smakprov på grafik Övningsanteckningar: http://www.nada.kth.se/ hjorth/teaching/prgi05 Vad är arv? Vi ärver från GregorianCalendar Antag att det finns en klass som har nästan allt vi behöver. Den gör det vi vill att den ska göra utom i ett par fall. Ska vi då behöva skriva om allt från början eller kan vi bygga vidare på den redan existerande klassen? Genom att skriva extends GregorianCalendar så ärver vår klass smidigt kalenderegenskaperna och vi kan bygga vidare på dem. import java.util.*; public class Datum extends GregorianCalendar { private GregorianCalendar lov; // ny instansvariabel Till exempel så finns det en datumklass, men den kan inte automatiskt berätta hur lång tid det är kvar till jullovet! Vi skulle vilja kunna skriva: public Datum() { super(); // anropa GregorianCalendars konstruktor // Ytterligare ett anrop till konstruktorn lov = new GregorianCalendar(2005,12,19,13,00); public double timmartilljullovet() { System.out.println(idag.timmarTillJullovet()); // gettimeinmillis() ger tid i millisekunder sedan 1 januari 1970 return (lov.gettimeinmillis() - gettimeinmillis())/(1000.0*60*60); Kan vi då på något vis göra en egen klass som får ärva egenskaper från klassen GregorianCalendar? Vad är skillnaden mellan de två konstruktoranropen? Med hjälp av super() så anropar vi ursprungsklassens konstruktor så den får en chans att initiera de ärvda delarna av vårt objekt.

Vi testar vår nya klass En detalj kvar... import java.util.*; import java.text.*; public class ArvExempel { public static void main(string[] parametrar) { DecimalFormat df = new DecimalFormat("#.##"); Datum idag = new Datum(); System.out.println("Datorklockan är nu " + idag.get(calendar.hour_of_day) + ":" + idag.get(calendar.minute) + "."); När jag testkörde programmet i söndags blev det ett fel i utskriften, hur ska vi göra för att rätta till det? >javac ArvExempel.java >java ArvExempel Datorklockan är nu 12:8. Det är 2449.86 timmar kvar till jullovet. double tidkvar = idag.timmartilljullovet(); System.out.println("Det är " + df.format(tidkvar) + " timmar kvar till jullovet."); Här använder vi oss av DecimalFormat för att utskriften inte ska ha för många decimaler. Java API Om vi behöver kolla upp hur vi använder en viss klass så kan vi göra det på Suns websida. Enklast är att söka på klassen i nedre vänstra listan

Hur får vi grafik? Fler komponenter - menyer Ett första grafikexempel, HelloWorld.java public class HelloWorld { public static void main(string parametrar[]) { Frame enframe = new Frame("Hello World!"); Label enlabel = new Label("Hej kompis!"); enframe.add(enlabel); enframe.setsize(200, 100); Vi har här skapat en Frame och sedan placerat en Label på den genom att använda metoden add. Med setsize bestämmer vi storleken på vår Frame och slutligen så gör vi den synlig med show. Förutom text går det även att visa menyer public class Inmatning { Frame enframe = new Frame("Menyval"); Choice humörval = new Choice(); humörval.add("glad som en sol"); humörval.add("sur som en citron"); humörval.add("pillemarisk som en ekorre"); enframe.add(humörval); enframe.setsize(200, 25); Vi bygger ut vårt program genom att använda färdiga komponenter. Svårare än så behöver det inte vara. LayoutManager Kör vi koden kommer det att se ut så här: Hittills har vi bara visat en komponent på skärmen åt gången. Nu ska vi använda en LayoutManager för att visa flera komponenter samtidigt. public class LayoutExample { Frame enframe = new Frame("Border Layout"); enframe.setlayout(new BorderLayout()); Button norr = new Button("Norr"); Button söder = new Button("Söder"); Button öster = new Button("Öster"); Button väster = new Button("Väster"); Button mitten = new Button("Mitten"); Med raden enframe.add(norr, BorderLayout.NORTH); placerar vi ut en knapp i norra fältet, på samma sätt placeras de övriga knapparna ut i de olika fälten. enframe.add(norr, BorderLayout.NORTH); enframe.add(söder, BorderLayout.SOUTH); enframe.add(öster, BorderLayout.EAST); enframe.add(väster, BorderLayout.WEST); enframe.add(mitten, BorderLayout.CENTER); enframe.setsize(250, 150); Trycker vi på knapparna händer ingenting... Det vill vi ändra på! Vi lägger här till fem stycken knappar för att illustrera hur BorderLayout placerar ut de olika komponenterna på skärmen.

Hur ger vi knapparna liv? public class LevandeKnappar extends Frame implements ActionListener{ Vad vet vi? Varje gång en knapp trycks ner sker ett Event. Genom att skapa en metod som kan hantera händelser kan vi få knapparna att fungera. private Label display; private Button öka, minska; private int summa = 0; LevandeKnappar(String titel) { super(titel); // Vi har ärvt av Frame, bör anropa Frame-konstruktorn setlayout(new GridLayout(3,1)); setsize(200,100); Hur använder vi det? Vi låter vår klass implementera ActionListener och kopplar den till knapparna. Varje gång en knapp trycks ner körs då metoden actionperformed. display = new Label("0", Label.CENTER); öka = new Button("Öka"); minska = new Button("Minska"); // Koppla ihop knapparna med vår ActionListener öka.addactionlistener(this); minska.addactionlistener(this); add(display); add(öka); add(minska); public void actionperformed(actionevent e) { Hur ser det ut i kod? Se LevandeKnappar-klassen på nästa sida. if(e.getsource() == öka) { // Var det en knapp som trycktes ner? summa++; display.settext("" + summa); else if(e.getsource() == minska) { summa--; display.settext("" + summa); LevandeKnappar minräknare = new LevandeKnappar("Räknare"); minräknare.setvisible(true); Hur läser vi in text? Det är ganska vanligt att vi vill fråga användaren om ett namn eller ett tal. Då är TextField användbart. Här kodar vi en grafisk temperaturomvandlare mellan Fahrenheit och Celsius. class TextInlasning extends Frame implements ActionListener { private Label titel, fahrtext, celtext; private TextField fahrenheit, celsius; TextInlasning() { setfont(new Font("Arial",Font.BOLD,20)); settitle("temperaturomvandling"); setsize(500,130); setlayout(new FlowLayout()); private int fahrtocel(int f) { return (f - 32) * 5 / 9; private int celtofahr(int c) { return 9 * c / 5 + 32; public void actionperformed(actionevent event) { if(event.getsource() == fahrenheit) { int f = Integer.parseInt(fahrenheit.getText()); celsius.settext("" + fahrtocel(f)); else if(event.getsource() == celsius) { int c = Integer.parseInt(celsius.getText()); fahrenheit.settext("" + celtofahr(c)); public static void main(string[] inparam) { TextInlasning t = new TextInlasning(); t.setvisible(true); // Glöm inte att visa fönstrena! // Programmet är interaktivt! Vi implementerar en ActionListener för att känna av när användaren har skrivit in en temperatur. titel = new Label("Omvandling mellan Fahrenheit och Celsius"); fahrtext = new Label("Fahrenheit:"); celtext = new Label("Celsius:"); fahrenheit = new TextField(4); celsius = new TextField(4); add(titel); add(fahrtext); add(fahrenheit); add(celtext); add(celsius); fahrenheit.addactionlistener(this); celsius.addactionlistener(this); Med metoden fahrenheit.gettext() läser vi in den text som skrivits in i Fahrenheit-rutan.

Hur visar man en bild? public class VisaBild extends Frame { // Vi ärver från Frame-klassen Antag att vi vill kunna få upp följande på skärmen? private Image bild; VisaBild(String titel, String filnamn) { super(titel); // Anropa Frame-klassens superkonstruktor Toolkit toolkit = Toolkit.getDefaultToolkit(); bild = toolkit.getimage(filnamn); MediaTracker mediatracker = new MediaTracker(this); mediatracker.addimage(bild, 0); try { // Vänta på att bilden laddas in mediatracker.waitforid(0); catch(interruptedexception ie) { System.err.println(ie); System.exit(1); // Detta behövs för att kunna stänga fönstret med musen addwindowlistener(new WindowAdapter() { public void windowclosing(windowevent e) { System.exit(0); ); setsize(bild.getwidth(null), bild.getheight(null)); Hur gör vi då? // Metod som ritar upp bilden på skärmen public void paint(graphics graphics) { graphics.drawimage(bild, 0, 0, null); VisaBild vb = new VisaBild("Party!", "kräftskiva.jpg"); vb.setvisible(true); Hur gör jag för att... Det som vi har gått igenom idag är bara ett smakprov på vad man kan göra i java. Mer information finns att hitta på nätet. Java API http://java.sun.com/j2se/1.5.0/docs/api/