Frames och applets - en jämförelse

Relevanta dokument
Grafik, bilder och ljud

Att prova på en enkel Applet och att lära sig olika sätt att hämta data från tangentbordet. Du får även prova på att skapa din första riktiga klass.

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

Applets med komponenter

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

2D1339 Programkonstruktion för F1, ht 2004

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

Rita Egna Bilder, Timer

DD1342 Programkonstruktion för F1, ht 2007

Lite logik. Kap 6: Sid 2

2D1339 Programkonstruktion för F1, ht 2003

Lab5 för prgmedcl04 Grafik

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Föreläsning 5-6 Innehåll

JAVA Mer om klasser och objektorientering

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

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

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

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

Exempel på användning av arv: Geometriska figurer

Frames, menyer och GUI-program

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

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

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

5. En metod som anropar sig själv a) får inte förekomma i Java-program b) kallas destruktiv c) kallas iterativ d) kallas rekursiv 6. Vilka värden har

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

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Java, klasser, objekt (Skansholm: Kapitel 2)

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

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

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

FactoryCast HMI. Premium & Quantum PLC. Applets

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Laboration 4: Digitala bilder

TENTAMEN OOP

Javas klassbibliotek. Kap 7: Sid 2

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

ID1004 Laboration 3, 5-6 November 2012

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Lösningsförslag övning 2.

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

2D1339 Programkonstruktion för F1, ht 2003

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

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

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

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

Föreläsning 3-4 Innehåll

Laboration 1: Figurer i hierarki

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

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

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

2D1342 Programkonstruktion för F1, ht 2006

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

JAVAUTVECKLING LEKTION 11

TUTORIAL: KLASSER & OBJEKT

Föreläsning 13 Innehåll

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

Vad är ett objekt? Tillstånd och beteende. Vad är ett objekt? Exempel

Laboration 3, uppgift En klass för en räknare

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa

Objektorienterad programmering

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

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll.

Datalogi I, grundkurs med Java 10p, 2D4112, Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera förs

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

Övningar Dag 2 En första klass

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

Modeller, Objekt och Klasser

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

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

TENTAMEN I. OBJEKTORIENTERAD PROGRAMMERING för Z1. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

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

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Klasser och objekt, referenser Grundkurs i programmering med Python

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl

TENTAMEN OOP

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 2

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

Föreläsning 3 sept 10 (Måndag v 37). DD Chapter 3.

Objekt och referenser

Klassen javax.swing.timer

Design av interaktiv multimedia. Läs i förväg om det som övningarna kommer att beröra. Träna hemma både före och efter övningarna.

Arrayer. Indexerade variabler, arrayer, fält Statistiska mått Sortering Sökalgoritmer Rita polygoner Objektarrayer Starta program med argument

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

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

Laboration 1 - Grunderna för OOP i Java

Det är principer och idéer som är viktiga. Skriv så att du övertygar examinatorn om att du har förstått dessa även om detaljer kan vara felaktiga.

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

3.5 Visuell programmering

NetBeans 7. Avsikt. Projektfönster

PROGRAMMERINGSTEKNIK TIN212

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Klasshierarkier - repetition

Transkript:

4 Applets Frames och applets - en jämförelse Din första applet Färger, texter och figurer Skapa egna klasser och objekt Bilder och ljud Parametrar i html-koden

Kap 4: Sid 2 Frames och applets - en jämförelse Att visa en Frame Vi repeterar först hur vi gjorde för att visa en Frame: I föregående kapitel gjorde du en övning där du skapade en klass, MinFrame, genom att ärva från Frame. Sedan skrev du ett javaprogram (en klass med en main-metod) Här instansierade du ett MinFrame-objekt och visade det på skärmen: class VisaFrame public stati void main(...) MinFrame f; f = new MinFrame(); f.show();... class Frame public void show()... // med flera metoder // (Kod skriven av // Javas konstruktörer) class MinFrame extends Frame MinFrame()... public void show()... // med flera metoder // (Kod skriven av // Javas konstruktörer) f... show()... MinFrame-objektet MinFrame-objektet är en (mycket enkel) GUI-applikation, ett windows-program. Det kan förses med knappar, textfält, kryssrutor etc. (Det ska vi göra så småningom ) För att visa ett Frame-objekt (starta GUI-applikationen) krävs alltså en main-metod där man instansierar objektet (anropar dess konstruktor) anropar objektets show-metod Java applets Ordet "applet" betyder "liten applikation" (litet program) Vad är då en applet? En applet är också en GUI-applikation, men den är inte ett fristående program. En applet visas (och körs) "inbäddad" på en webb-sida. Java4.doc Ove Lundgren 2

Kap 4: Sid 3 Java har en klass som heter Applet. Man skriver sin egen applet genom att ärva från denna klass (precis som vi gör en egen frame genom att ärva från klassen Frame ) Antag att vi skrivit en applet, MinApplet.java, där vi ärvt från Applet, samt sparat och kompilerat så att filen MinApplet.class existerar. Det behövs nu inte någon klass med en main-metod för att starta appleten. Ett appletobjekt instansieras och visas nämligen genom webbläsarens försorg! För att få webbläsaren att skapa och visa ett MinApplet-objekt skriver man helt enkelt in följande tagg i HTML-koden: <APPLET CODE = "MinApplet.class" WIDTH=300 HEIGHT=200> </APPLET> När webb-läsarens träffar på denna tagg så instanieras (och visas) automatiskt ett objekt ur klassen. En applet har några metoder. Efter att objektet skapats anropas dessa (med automatik). Så här kan du tänka dig att det går till: En "tagg" i vår HTML-fil <APPLET CODE = "MinApplet.class" WIDTH=200 HEIGHT=200> </APPLET> class Applet public void init() public void start() public void paint(graphics g) // fler metoder finns... Någon classfil med mainmetod behövs inte! Webb-läsaren utför satserna nedan automatiskt Här är vår appletklass, skapad genom arv från klassen Applet MinApplet x; x = new MinApplet(); x.init(); x.start(); x.paint(graikfobj); Objektet skapas class MinApplet extends Applet public MinApplet() // konstruktor public void init() public void start() public void paint(graphics g) // fler metoder finns... init() start() Appletytan visas paint(grafikobj) // fler metoder finns... Innehåll visas MinApplet-objektet Anmärkning: I figuren ovan har vi (för att öka tydligheten) låtit appletobjektet få referensen x. Instansieringen av appletobjeket sker bakom kulisserna så detta är ingen referens vi kan använda oss av. Java4.doc Ove Lundgren 3

Kap 4: Sid 4 Vi kommer nu till avsnitt där vi ska lära oss hur man arbetar med färger samt hur man ritar och lägger in komponenter (knappar, textfält, kryssrutor etc). Därefter följer mus- och knapphantering, animering, trådar mm. För att lära oss detta kan vi antingen arbeta med frames eller med applets. Hanteringen är likartad. Vi har bedömt att det är något enklare att gå vägen via applets. Det är dessutom trevligt att kunna publicera sina nyvunna kunskaper på webben om man vill Därför kommer större delen av denna kurs att handla om applets. Alltså: Dags att jobba med Applets! Din första applet Bland de fördefinierade klasserna finns alltså klassen Applet Den klassen finns i ett paket som heter java.applet. (Vi måste komma ihåg att importera det paketet.) Klassen Applet har metoder som finns med i varje applet ( bl a init, start, paint ) Att skapa en applet innebär att man skapar en klass som ärver från klassen Applet. Här är koden för en mycket enkel applet, MinApplet. import java.applet.*; public class MinApplet extends Applet public MinApplet() // konstruktorn Använd alltid modifieraren public när du skapar skapar en applet (annars hittas den inte av webläseren) Övning: MinApplet Skapa mappen X\java\MinApplet Skriv in koden ovan. Spara som MinApplet.java i mappen MinApplet Kompilera (MinApplet.class skapas) Skriv en HTML-fil: <html> <body bgcolor ="blue"> <h1>jag testar min applet! </h1> <APPLET CODE="MinApplet.class" WIDTH=300 HEIGHT=200 ></APPLET> </body> </html> Spara den med namnet MinApplet.html i mappen MinApplet Öppna MinApplet.html i webbläsaren (En helt tom applet visas ) Med JDK följer ett program, appletviewer, med vars hjälp vi kan se appleten utan att starta webbläsaren. Exekvera MinApplet.html med appletviewer (En helt tom applet visas ) Java4.doc Ove Lundgren 4

Kap 4: Sid 5 Metoderna i klassen Applet Klassen Applet har ett antal metoder (som vår egen applet, MinApplet, ärver) Metod: init() start() Körs med automatik när en applet laddas. Här lägger man kod för initialvärden av olika slag. (I applets placerar man, som vi senare ska se, oftast initieringar i init-metoden, och inte i konstruktorn.) Körs automatiskt då en applet visas Här skrivs kod som får appleten att göra något. Antag att du under ett surfpass visar en en webbsida med en applet. Därefter går du till en annan sida men återvänder sedan till appleten. Appletens init-metod körs första gången appleten visas. Appletens start-metod körs första gången samt varje gång du återvänder till sidan med appleten. paint(graphics g) Metoden exekveras automatiskt varje gång en applet visas. Metoden har en parameter, en referens till ett Graphics-objekt. Dessa har en rad metoder för att rita och skriva på appletytan. Vi ska strax förklara hur Graphics fungerar Följande metoder exekveras med automatik i samband med att man lämnar en applet: stop() destroy() Körs automatiskt då man lämnar webb-sidan med appleten Exekveras automatiskt när man slutar sitt surfpass. (Det kommer att dröja ett tag innan vi använder de två sistnämnda metoderna. För närvarande räcker det att du känner till att de finns ) Alla dessa metoder (och många fler) finns i klassen Applet, och därmed i vår appletklass, subklassen MinApplet. class Applet public void init() public void start() public void paint(graphics g) public void stop() public void destroy()... Metoderna finns här också, de är ju ärvda från klassen Applet! class MinApplet extends Applet public void init() public void start() public void paint(graphics g) public void stop() public void destroy()... Java4.doc Ove Lundgren 5

Kap 4: Sid 6 Du minns från kapitel 3 att en metod kan omdefinieras i subklassen (överskuggas säger man ibland, engelska: override) Att skriva applets handlar mycket om att omdefiniera ovanstående metoder. Vi börjar med att se på en typisk omdefinition av paint. Då måste vi först diskutera klassen Graphics: Klassen Graphics Appletens yta kan du tänka dig som en rityta som vi kan rita och skriva på. Vi behöver nu en "verktygslåda" med metoder för att rita och skriva på appleten Det finns en klass som heter Graphics ( finns i paketet java.awt ) Ett objekt ur den klassen är en sådan "verktygslåda"! Med metoderna i ett Graphics -objektets kan vi nämligen rita och skriva på appleten! Till varje appletobjekt (även till Frame-objekt och flera andra typer av objekt) hör ett Graphics-objekt. (Du kan tänka dig att det till varje rityta finns en låda med ritverktyg.) init() start() paint(grafikobj) //fler metoder finns... drawstring(...) drawrect(...) fillrect(...) med flera grafikobjektet som tillhör appleten MinApplet-objektet Vi såg på föregående sida att metoden paint anropas och körs då appleten visas. Metoden paint ska, som synes, ha ett argument, nämligen en referens till ett Graphics-objekt. Då paint anropas används som argument automatiskt en referens till detta grafikobjektet som tillhör appleten! Exempel: Tänk dig att vi överskuggar paint-metoden så här: public void paint(graphics g) g.drawstring("min applet!", 20, 30); Vad händer vid anrop av paint? Jo, parametern g byts ut mot referensen till grafikobjektet som tillhör appleten. Satsen g.drawstring("min applet!", 20, 30); betyder då att metoden drawstring i grafikobjektet som tillhör appleten exekveras: Strängen "Min applet" kommer att skrivas på positionen 20, 30 i appleten ( 20 pixlar från vänsterkanten, 30 pixlar från överkanten ) Anmärkning: Som namn på parametern brukar man välja bokstaven g (Så är det i nästan all javalitteratur ) Naturligtvis kan du välja vilket parameternamn som helst Java4.doc Ove Lundgren 6

Kap 4: Sid 7 Övning: Överskugga paint Gör tillägg i MinApplet på följande sätt: import java.applet.*; public class MinApplet extends Applet public MinApplet() // konstruktor public void paint(graphics g) g.drawstring("min applet!", 20, 30); Spara. Kompilera. Kör MinApplet.html i appletviewer Vi använder ju här klassen Graphics så vi måste komma ihåg att importera den. Klassen ligger i paketet java.awt. paint-metoden är omdefinierad så som vi beskrev på föregående sida: g.drawstring( Min applet!, 20, 30); Metoden har, som du ser, tre argument: - textsträngen Min applet! - talet 20 (som anger textsträngens position i x-led räknat i pixels) - talet 30 (positionen i y-led) (Du kommer väl ihåg att textsträngar skrivs inom citationstecken. Tal skrivs utan citationstecken.) Lägg till ytterligare en sats i paint-metoden: g.drawstring("välkommen!", 20, 60); Spara kompilera kör! Njut! Du kommer snart att lära dig använda de andra metoderna i grafikobjektet Om init-metoden I kaptitel 2 behandlade vi konstruktorer. Konstruktorn är den metod som skapar objektet. Du minns kanske att en konstruktor med tomt block (standardkonstruktorn) inte behövde skrivas in i koden, den existerar ändå. Satsen public MinApplet() // konstruktor i appleten ovan skulle vi alltså kunnat utelämna (Testa gärna!) I applets brukar man alltid använda standardkonstruktorn, så vi kodar den inte i fortsättningen (kom bara ihåg att den finns där, "osynlig" ) För att sätta eventuella initialvärden används i applets metoden init Sådan kod som vi för andra klasser skriver i konstruktorn placerar vi hos applets i init-metoden Exempel följer strax Java4.doc Ove Lundgren 7

Kap 4: Sid 8 En modell för att skriva applets Vi kommer att följa denna modell när vi skriver våra applets: Allra först skriver vi satser för att importera klassen Applet ( i paketet java.applet ) Vanligen importeras också klasserna i paketet java.awt (där finns Graphics, Color m fl) (Först i klassdefinitionen brukar vi ha konstruktorn. Eftersom vi i applets alltid använder standardkonstruktor kodar vi den inte) Deklarationer av instansvariabler och objekt. Metoden init överskuggas: Här skriver vi kod som sätter initialvärden: Vi instansierar objekt som ska användas (med new), sätter begynnelsevärden på variabler mm (sådant som vi "normalt" skriver i konstruktorn ) (Eventuell överskuggning av metoden start. Det dröjer lite innan vi använder start ) Metoden paint överskuggas. Här är modellen : import java.applet.*; import java.awt.* ; // importera ev. andra klasser som behövs public class MinApplet extends Applet // standardkonstruktor - kod utelämnas // här följer deklaration av instansvariabler och objekt public void init() // ev. omdefiniera init public void paint(graphics g) // omdefiniera paint Java4.doc Ove Lundgren 8

Kap 4: Sid 9 Färger, texter och figurer Övning: Färglägg texter Skapa mappen X\java\Grafik Skriv in denna kod och spara filen som Grafik.java i den nya mappen. import java.applet.*; public class Grafik extends Applet // instansvariabler Color farg; public void init() farg = new Color(255,0,0); public void paint(graphics g) g.setcolor(farg); g.drawstring("välkommen till JAVA",25,25); g.drawstring("välkommen till JAVA",25,45); Kompilera. Skriv en enkel HTML-fil (Grafik.html). Kör appletviewer (Texten skrivs med röd färg) Du förstår förhoppningsvis det mesta av koden. Nyheter förklaras nedan i avsnittet om färger Om färger Vi använder en färg i övningen ovan och måste skapa ett objekt ur klassen Color Klassen finns i java.awt-paketet Först i klassdefinitionen deklarerar vi ett objekt som vi kallar farg. Vi skriver Color farg; I init-metoden skapar vi objektet farg. Vi skriver farg = new Color(255,0,0); Color-konstruktorn tar tre argument, tre heltal i intervallet 0-255 En färg blandas nämligen av tre komponenter: Rött, Grönt, Blått. En komponent kan ha värden mellan 0 och 255. Några exempel: farg1 = new Color(255,0,0); // röd färg farg2 = new Color(0,255,0); // grön färg farg3 = new Color(0,0,255); // blå färg farg4 = new Color(255,0,255); // violett färg farg5 = new Color(255,255,255); // vit färg farg6 = new Color(0,0,0); // svart färg farg7 = new Color(128,128,128); // grå färg Java4.doc Ove Lundgren 9

Kap 4: Sid 10 Grafikobjekt (vår "låda med målarverktyg") har en metod som heter setcolor och denna metod har ett objekt av klassen Color som argument. Vi använder den i paint-metoden för att sätta färg på den text som skrivs med drawstring Testa! Ändra till annan färgblandning. Spara kompilera kör! Färgkonstanter Ovan skapade vi själva ett färgobjekt med ( t ex ) och valde sedan denna färg med farg1 = new Color(255,0,0); g.setcolor(farg1); Klassen Color har ett antal färgkonstanter, det vill säga fördefinierade färger, som direkt kan användas, så här exempelvis: g.setcolor(color.red); Color.red är en färgkonstant som (förstås) ger röd färg. Här är alla färgkonstanterna: Color.orange Color.pink Color.cyan Color.magenta Color.yellow Color.black Color.white Color.gray Color.lightGray Color.darkGray Color.red Color.green Color.blue En konstant är (som vi förut har sett) en klassvariabel (primitiv variabel eller objekt) vars värde ej kan ändras. Så här är t ex den röda färgen deklarerad i Color-klassen: public static final Color red = new Color(255,0,0); Övning: Testa färgkonstanter Gör tillägg i paint-metoden i appleten ovan: Spara - kompilera - kör. g.setcolor(farg); g.drawstring("välkommen till JAVA",25,25); g.setcolor( Color.blue ); g.drawstring("välkommen till JAVA",25,45); Den "senast" satta färgen är den som gäller för utskrifterna: Den första strängen skrivs med din egen-komponerade färg, den andra skrivs med blå färg. Java4.doc Ove Lundgren 10

Kap 4: Sid 11 Grafik Övning: Rita figurer Ändra koden i klassen Grafik till följande: // Grafik import java.applet.*; public class Grafik extends Applet // deklarationer Color roed, groen, blaa; // Tre färgobjekt deklareras public void init() roed = new Color(255,0,0); groen = new Color(0,255,0); blaa = new Color(0,0,255); // röd // grön // blå public void paint(graphics g) g.drawline(10,10,100,100); g.setcolor(groen); g.drawrect(100,10,130,170); g.setcolor(blaa); g.drawoval(50,50,120,100); g.setcolor(roed); g.drawstring("välkommen till JAVA",25,25); g.drawstring("välkommen till JAVA",25,45); Spara. Kompilera. Kör med appletviewer Här använder vi ytterligare några metoder i Graphics-objektet ("målarlådan") Metoderna används för att rita figurer av olika slag. Alla metoderna har fyra heltalsargument som anger hur figurerna ska placeras: Metoden drawline(x1,y1,x2,y2) ritar en linje från punkten (x1,y1) till punkten (x2,y2) (i vårt fall alltså från (10,10) till (100,100) ) Metoden drawrect(x,y,b,h) ritar en rektangel med övre vänstra hörnet i (x,y) med bredden b och höjden h (i vårt fall övre vänstra hörnet i (100,10) och med bredden 130 och höjden 170) Metoden drawoval(x,y,b,h) ritar en ellips inskriven i den tänkta rektangel som har övre vänstra hörnet i (x,y) och med bredden b och höjden h ( i vårt fall ö. v. hörn i (50, 50) bredd 100 och höjd 100) Så här alltså: (50, 50) 120 100 Java4.doc Ove Lundgren 11

Kap 4: Sid 12 Metoden setcolor sätter färg på de ritade figurerna. Nu: Byt ut drawrect mot fillrect och drawoval mot filloval Spara kompilera kör (Figurerna är nu fyllda med den valda färgen ) Byt ut g.fillrect(100,10,130,170) mot g.fillroundrect(100,10,130,170,20,20) Spara kompilera kör (Rektangeln har nu rundade hörn ) (100, 10) 130 170 20 20 Om man ökar talen 20 får man mer avrundade hörn Om koordinater i en applet Från matematiken är vi vana vid att x får större värden åt höger längs x-axeln och att y växer uppåt I en applet (och i de flesta datorgrafiksammanhang) ligger origo, alltså pixeln eller bildpunkten med bildskärmskoordinaterna ( 0, 0 ) längst upp till vänster. x får större värden ju längre åt höger vi kommer men: y växer nedåt. Så här: ( 0, 0) Allt större x-värden 50 Allt större y-värden 100 ( 100, 50 ) (100, 80 ) Java4.doc Ove Lundgren 12

Kap 4: Sid 13 Övning: Stapeldiagram Metoden g.fill3drect(x,y,b,h,true) ger en viss (dock blygsam) 3D-effekt. x, y, b och h fungerar som för fillrect. Det fjärde argumentet ska ha ett boolskt värde (dvs skriv antingen antingen true eller false ) (true ger "upphöjning", false ger "nedsänkning") (Mer om boolska värden kommer i kapitel 6 ) Gör en applet som ser ut som på bilden nedan. (Olika färger på staplarna.) Spara som Stapeldiagram.java i mappen X\java\Stapel Övning: Blomma Skapa mappen X\java\Blomma Skriv en applet som visar en blomma såsom figuren visar. Använd blå, röda, gröna och gula cirklar, och en (smal) grön rektangel. Spara som Blomma.java Java4.doc Ove Lundgren 13

Kap 4: Sid 14 Välj bakgrundsfärg Övning: Bakgrundsfärg Metoden setbackground() är en metod som är definierad i klassen Applet - och därmed i vår appletklass. När en ett objekt anropar en metod som den själv äger så anropas metoden med this, så här: this.setbackground(color.yellow); // Metoden setbackground anropas Metoden har ett objekt av typen Color som argument. Vi har använt konstanten Color.yellow När metoden anropas får objektet (vår applet) den bakgrundsfärg som argumentet anger. Skriv in ovanstående sats i init()-metoden i appleten Grafik Spara kompilera provkör. Experimentera gärna vidare med texter, färger och figurer. Provkör på riktigt i en web-läsare. Anmärkning: Ordet this kan utelämnas. Om man inte skriver någonting alls framför ett metodnamn så är det underförstått att objektet anropar en egen metod. (Vi skriver - oftast - ut this för att öka tydligheten.) Textfonter Övning: Vi testar fonter Skriv in koden nedan. Spara den som FontTest.java i X\java\FontTest // FontTest import java.applet.*; public class FontTest extends Applet // deklarationer Font typ1, typ2, typ3; public void init() typ1 = new Font("TimesRoman",Font.PLAIN,10); typ2 = new Font("Courier",Font.BOLD,20); typ3 = new Font("Arial",Font.ITALIC,30); public void paint(graphics g) g.setcolor(color.red); g.setfont(typ1); g.drawstring("java - forever!",100,100); g.setfont(typ2); g.drawstring("java - forever!",100,150); g.setfont(typ3); g.drawstring("java - forever!",100,200); Kompilera. Skriv en HTML-fil. Kör! Läs kommentarer på nästa sida! Java4.doc Ove Lundgren 14

Kap 4: Sid 15 Vi arbetar med en ny klass Font (finns i java.awt-paketet) Vi deklarerar tre fontobjekt: typ1, typ2, typ3 I init-metoden skapar vi de tre objekten och skickar med tre parametrar: - Typsnitt (t ex TimesRoman ) - Stil (t ex Font:BOLD) - Storlek. (t ex 20 ) Testa gärna andra kombinationer av typsnitt - stil -storlek! Text på statusraden Övning: Statusrad I någon av dina applets - lägg till följande sats i paint-metoden: this.showstatus("denna text skrivs på statusraden!"); Spara - kompilera om. Kör motsvarande HTML-fil med Appletviewer Texten skrivs på statusraden längst ned i appleten (Ibland får du göra appleten lite större för att statusraden ska synas) Öppna även HTML-filen i web-läsaren och provkör appleten där. Texten hamnar på web-läsarens statusrad. showstatus är en metod som definierats i klassen Applet. Därmed finns den även i vår applet och ägs således av appletobjektet Java4.doc Ove Lundgren 15

Kap 4: Sid 16 Skapa egna klasser och objekt Dags att skriva några egna objekt igen! Övning: KryssRektangel Skapa klassen KryssRektangel, så här: public class KryssRektangel private int xpos; private int ypos; private int bredd; private int hojd; public KryssRektangel( ) bredd = 50; hojd = 40; public KryssRektangel(int b, int h ) bredd = b; hojd = h; public void setposition(int x, int y) xpos = x; ypos = y; public void rita(graphics g) g.drawrect(xpos, ypos, bredd, hojd); g.drawline(xpos, ypos, xpos+bredd, ypos+hojd); g.drawline(xpos, ypos+hojd, xpos+bredd, ypos); Paketet java.awt måste importeras eftersom klassen Graphics förekommer Instansvariablerna anger den kryssade rektangelns position i x- och y-led, samt dess bredd och höjd. Klassen har två konstruktorer: Den första har inga argument. Variablerna får standardvärden för bredd och höjd. I den andra tilldelas instansvariablerna värden vid instansieringen. Klassen har en metod, setposition, där man kan sätta rektangelns läget, det vill säga bestämma var rektangeln ska ritas. Klassen har också en metod, rita, som ritar den kryssade rektangeln med hjälp av metoderna ("verktygen") i ett Graphics-objekt ("målarlådan") ( xpos,ypos ) bredd hojd ( xpos+bredd, ypos+hojd ) Java4.doc Ove Lundgren 16

Kap 4: Sid 17 Spara klassen med namnet KryssRektangel.java i mappen X\java\KryssRektanglar och kompilera Skriv nu en applet som skapar objekt ur klassen ovan, och anropar dess metoder setposition och rita: // TestaKryssRektangel.java import java.applet.*; public class TestaKryssRektangel extends Applet KryssRektangel kr; public void init() kr = new KryssRektangel(50, 40 ); kr.setposition( 20, 30 ); public void paint(graphics g) kr.rita(g); // argumentet är appletens Graphics-objekt Spara som TestaKryssRektangel.java i samma mapp som ovan. Kompilera. Skriv också en html-fil som startar appleten, och exekvera! I TestaKryssRektangel: Deklarera ytterligare ett objekt: KryssRektangel kr, kr2 ; I init-metoden, lägg till: kr2 = new KryssRektangel(10,50 ); kr2.setposition( 50, 40 ); I paint-metoden: kr2.rita(g); Spara, kompilera, provkör! I KryssRektangel: Lägg till ytterligare en instansvariabel private Color farg; Ändra den andra konstruktorn så att man kan ange färg på den kryssade rektangeln: public KryssRektangel(int b, int h, Color c ) bredd = b; hojd = h; farg = c; Först i rita-metoden: Lägg till: Spara och kompilera. g.setcolor(farg); Java4.doc Ove Lundgren 17

Kap 4: Sid 18 I TestaKryssRektangel: Ändra instansieringen av objekt: kr = new KryssRektangel( 50, 40, Color.red ); ( Gör samma sak med kr2 ) Spara, kompilera, provkör! Övning: KryssKvadrat Skriv en klass, KryssKvadrat, som ritar kryssade kvadrater. Den ska kunna instansieras från en applet med t.ex kk = new KryssKvadrat(50, Color.red ); // sidan är 50 Spara i samma mapp som ovan. Sedan: Deklarera och skapa några kryssade kvadrater i appleten ovan. Tips: Klassen KryssKvadrat ärver förstås från KryssRektangel. Allt är redan deklarerat. Det enda som behövs är en ny konstruktor. Kom ihåg att deklarera instansvariablernas i KryssRektangel som protected Försök klara uppgiften på egen hand (annars får du kika nedan) public class KryssKvadrat extends KryssRektangel public KryssKvadrat (int s, Color c) bredd =s; // bredd och hojd får samma värde hojd = s; // farg =c; Java4.doc Ove Lundgren 18

Kap 4: Sid 19 Övning: Asteroid I denna applet, VisaAsteroid, instansieras ett objekt av klassen Asteroid. Skriv av (eller kopiera) koden. Spara den som VisaAsteroid.java i mappen X\java\Asteroid // VisaAsteroid.java import java.applet.*; public class VisaAsteroid extends Applet Asteroid ast; public void init() ast = new Asteroid(50 ); ast.setposition( 120, 130 ); public void paint(graphics g) this.setbackground(color.black); ast.visa(g); Skriv klassen Asteroid. Då ett objekt, ast, instansieras med ast = new Asteroid(50); ska ett Asteroid-objekt med diametern 50 pixels skapas. I klassen finns en metod public void setposition(int x, int y)... Vid anrop kan man ange koordinaterna för asteroidens mittpunkt, t.ex. ast.setposition(100,120); I klassen finns ännu en metod, public void visa(graphics g)... Då metoden anropas, t.ex. så här ast.visa(g); ska asteroiden visas som en mörkgul cirkelskiva och, på denna, en blekgul cirkelskiva något förskjuten uppåt-vänster. Spara Asteroid.java i mappen X\java\Asteroid och kompilera. Komilera VisaAsteroid.java Skriv också en html-fil som visar appleten Försök klara uppgiften på egen hand! (Lösningsförslag på nästa sida) Gör sedan så att fler Asteroid-objekt skapas och visas Java4.doc Ove Lundgren 19

Kap 4: Sid 20 Lösningsförslag: public class Asteroid private int xpos, ypos, diam; private Color c1, c2; public Asteroid( int d ) diam = d; c1 = new Color(220,220,150 ); // grå-gul c2 = new Color(255,255,190 ); // vit-gul public void setposition(int x, int y) xpos = x; ypos = y; public void visa(graphics g) g.setcolor(c1); g.filloval(xpos - diam/2, ypos - diam/2, diam, diam ); int diam2 = diam - 5; g.setcolor(c2); g.filloval(xpos - diam/2,ypos-diam/2, diam2, diam2 ); Övning: Flaggor I appleten på nästa sida instansieras tre objekt av typen Flagga. Metoden setposition() bestämmer flaggornas position på appletytan. Metoden rita(...) ritar flaggorna. Skriv av koden! Spara filen TestaFlagga.java i mappen X:\java\Flaggor Java4.doc Ove Lundgren 20

Kap 4: Sid 21 import java.applet.*; public class TestaFlagga extends Applet Flagga sweflag, danflag, finflag; public void init() sweflag = new Flagga(Color.blue, Color.yellow ); sweflag.setposition( 20, 30 ); danflag = new Flagga(Color.red, Color.white); danflag.setposition( 50, 100 ); finflag = new Flagga(Color.white, Color.blue ); finflag.setposition( 150, 130 ); public void paint(graphics g) setbackground(color.cyan); sweflag.rita(g); danflag.rita(g); finflag.rita(g); Skriv sedan klassen Flagga. Spara filen Flagga.java i samma mapp som ovanstående fil. Kompilera Flagga. Kompilera TestaFlagga. Skriv en html-fil som exekverar TestaFlagga och provkör. Så här ska resultatet bli: Övning: Norsk flagga Skriv en ny klass, NorFlagga som ärver från Flagga. Konstruktorn ska ha tre parametrar (färger) rita()-metoden ska rita en norsk eller isländsk flagga, så här: Java4.doc Ove Lundgren 21

Kap 4: Sid 22 Lösningsförslag: Övningen Flaggor // Flagga.java public class Flagga private int xpos, ypos; private int bredd=90, hojd=60; private Color bakfarg, korsfarg; public Flagga(Color c1, Color c2 ) bakfarg = c1; korsfarg = c2; public void setposition(int x, int y) xpos = x; ypos = y; public void rita(graphics g) g.setcolor(bakfarg); g.fillrect(xpos, ypos, bredd, hojd); g.setcolor(korsfarg); g.fillrect(xpos, ypos+hojd/2-5, bredd, 10); g.fillrect(xpos+bredd/3-5, ypos, 10, hojd); Lösningsförslag: Övningen Norsk Flagga // Ändra först i Flagga.java: protected int xpos, ypos; protected int bredd=90, hojd=60; protected Color bakfarg, korsfarg; // Lägg också till en parameterlös konstruktor: public Flagga() // NorFlagga.java public class NorFlagga extends Flagga private Color korsfarg2; public NorFlagga(Color c1, Color c2, Color c3 ) bakfarg = c1; korsfarg = c2; korsfarg2 = c3; //rita-metoden överskuggas: public void rita(graphics g) g.setcolor(bakfarg); g.fillrect(xpos, ypos, bredd, hojd); g.setcolor(korsfarg); g.fillrect(xpos, ypos+hojd/2-6, bredd, 12); g.fillrect(xpos+bredd/3-6, ypos, 12, hojd); g.setcolor(korsfarg2); g.fillrect(xpos, ypos+hojd/2-3, bredd, 6); g.fillrect(xpos+bredd/3-3, ypos, 6, hojd); Java4.doc Ove Lundgren 22

Kap 4: Sid 23 Övning: Stapelobjekt En stapel ritar du som bekant med g.fillrect(x,y,b,h) där x och y är koordinaterna för rektangelns övre, vänstra hörn. Skriv en klass Stapel med följande egenskaper: Ett objekt, st, instansieras i en applet med st = new Stapel(); Det ska finnas en metod: public void rita(int x, int y, int b, int h, Color c, Graphics g)... Då metoden anropas i en applet, t.ex. så här st.rita( 20, 100, 5, 25, Color.blue, g ); ska en blå stapel ritas med med nedre, vänstra hörnet i punkten ( 20, 100 ). Stapeln ska ha bredden 5 och höjden 25 pixels. Spara Stapel.java i mappen X\java\Stapel (som du har sedan tidigare) Försök klara uppgiften på egen hand! (Lösningsförslag på nedan) Skriv om appleten Stapeldiagram.java i övningen Stapeldiagram: Utnyttja din nya klass, Stapel public class Stapel // Endast en konstruktor utan parametrar. Behöver ej kodas... // Inga instansvariabler behövs... public void rita(int x, int y, int b, int h, Color c, Graphics g) g.setcolor(c); g.fillrect(x, y-h, b, h ); Övning: StreckGubbe Skriv en klass, StreckGubbe (Spara i mappen X\java\Gubbe ) Instansiering: gubbe = new StreckGubbe(Color c); Metoden gubbe.setposition(int x, int y)... sätter plats Metoden gubbe.visa(graphics g)... visar en figur på skärmen Skriv en applet som visar några gubbar Java4.doc Ove Lundgren 23

Kap 4: Sid 24 Bilder och ljud Några begrepp i samband med bild och ljud Det är trevligt (och enkelt) att lägga in bilder och ljud i applets. Du kommer att arbeta med två nya (lite speciella) klasser, Image och AudioClip. Image -klassen finns i paketet java.awt AudioClip finns i paketet java.applet Ett bildobjekt (Image-objekt) skapas och hämtar sitt bildinnehåll från en fil med en metod i appletobjektet som heter getimage() Ett ljudobjekt (AudioClip-objekt) skapas och hämtar ett ljud från en fil med en metod i appletobjektet som heter getaudioclip() Bildfiler ska ha formaten gif eller jpg Ljudfiler ska (i Java 1.1) vara sparat som au-filer. Java2 har även stöd för formaten wav, aiff och mid Spara för enkelhetens skull de ljud- och bildfiler som tillhör din applet i samma mapp som du har appletens java-, class- och html-filer. Övning: Bilder Skapa mappen X\java\BildLjud Skriv koden nedan och spara filen som Bilder.java i den nya mappen. Kopiera filen jumbo.gif till mappen (Du kan naturligtvis byta filen mot en egen gif- eller jpg-fil om du vill ) import java.applet.*; public class Bilder extends Applet // deklarationer Color roed, blaagraa; Image bild1; public void init() roed = new Color(255,0,0); blaagraa = new Color(200,200,255); bild1 = this.getimage(getdocumentbase (),"jumbo.gif"); this.setbackground(blaagraa); public void paint(graphics g) g.setcolor(roed); g.drawstring("jumbo vinkar",25,25); g.drawimage(bild1,50,50,this); Java4.doc Ove Lundgren 24

Kap 4: Sid 25 Kommentar: Vi deklarerar ett bildobjekt (som vi har kallat bild1 ) I init-metoden använder vi Applet-metoden getimage för att tala skapa bildobjektet och ange vilken bild vi vill visa: bild1 = this.getimage(getdocumentbase ( ), "jumbo.gif" ); Här kan man skriva URL (=webbadress) för den sida där bilden finns. Tomt betyder att bilden finns i samma mapp som den HTML-fil som startar appleten Här skriver du bildfilens namn Du ser att vi inte skapar ett bildobjekt med new här. Metoden getimage sköter instansieringen I paint-metoden använder vi Graphics-metoden g.drawimage(bild1,50,50,this) för att rita bilden i position (50, 50) i denna (this) applet. Skriv en enkel HTML-fil (Bilder.html) som startar appleten. Kör denna i appletviewer. (Bilden visas nu i din applet ) Lägg till denna rad sist i paint-metoden: g.drawimage(bild1,150,50,120,100,this); Denna variant av drawimage-metoden har sex argument: bildobjektets namn, x-position, y-position, bredd, höjd och this. Spara, kompilera, kör. Java4.doc Ove Lundgren 25

Kap 4: Sid 26 Övning: Ljud Kopiera filen spacemusic.au till din mapp. (Du kan naturligtvis välja en egen au-fil om du vill ) Komplettera Bilder.java på följande sätt: import java.applet.applet; import java.applet.audioclip; import java.awt.graphics; import java.awt.color; import java.awt.image; public class Bilder extends Applet // deklarationer Color roed, blaagraa; Image bild1; AudioClip ljud1; public void init() roed = new Color(255,0,0); blaagraa = new Color(200,200,255); bild1 = this.getimage(getdocumentbase(),"jumbo.gif"); ljud1 = this.getaudioclip(getdocumentbase(), "spacemusic.au"); this.setbackground(blaagraa); public void paint(graphics g) g.setcolor(roed); g.drawstring("jumbo vinkar",25,25); g.drawimage(bild1,50,50,this); g.drawimage(bild1,150,50,120,100,this); this.ljud1.play(); Vi importerar här AudioClip (finns i paketet java.applet) Vi deklarerar ett ljudobjekt (som vi kallar ljud1) I init-metoden skapas ljudobjektet och vi anger vilken ljudfil som ska användas med metoden getaudioclip() Vi spelar upp ljudet med metoden play(); Spara - kompilera - kör - njut Testa gärna: Byt ut au-filen mot en ljudfil i wave-format. Spara och kompilera (med en Java2-kompilator) Exekvera html-filen med appletviewer (för Java2) Java4.doc Ove Lundgren 26

Kap 4: Sid 27 Parametrar i html-koden Det går att skicka med parametervärden (strängar) till appleten från html-koden. Övning: Testa html-parametrar I Grafik.java - deklarera dessa strängar: String text1, text2; I init()- metoden, lägg till dessa satser: text1 = getparameter("p1"); text2 = getparameter("p2"); I paint()-metoden, ändra så att det står: Spara och kompilera. g.drawstring(text1,25,25); g.drawstring(text2,25,45); Ändra <APPLET>-taggen i Grafik.html till <APPLET CODE="Grafik.class" WIDTH=500 HEIGHT=300 > <PARAM NAME = "p1" VALUE = "Java for ever!"> <PARAM NAME = "p2" VALUE = "Kalle Persson"> // skriv ditt eget namn! </APPLET> Provkör i webläsare! Parametrarna p1 och p2 tilldelas värden (strängar) i <APPLET>-taggen. Det värde (den sträng) som parametern p1 håller överförs till String-variabeln text1 med satsen text1 = getparameter("p1"); i appleten, och skrivs ut. (Motsvarande sker med värdet i p2) Java4.doc Ove Lundgren 27