Datateknik A, Syfte: 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. Att läsa: Lektion 2 Uppgifter: Inlämning: 3 st Sker via inlämningsuppgifter i WebCT Lycka till!
Uppgift 1 Översikt Denna uppgift går ut på att skapa en enkel Applet med en tillhörande HTML-sida. Syftet med uppgiften är att få prova på att skapa en egen Applet, som sedan kan läggas ut på en hemsida för andra att beskåda. Vidare får du bekanta dig med Javas API-dokumentation. Uppgift Du ska skapa en Applet som du ska döpa till Uppgift1 och således spara i en fil med namnet Uppgift1.java. I din Applet ska du sen prova på att använda olika metoder för att rita på den yta Appleten äger. När du är färdig med din Applet ska du lägga ut den på din hemsida. Använd nedanstående mallar för att skapa din Applet och din HTML-sida. Applet: import java.awt.*; import java.applet.*; public class Uppgift1 extends Applet { public void paint(graphics g) { } } HTML-sidan: <html> <applet code="uppgift1.class" width="200" height="200"> </applet> </html> Inom de matchande klamrarna i metoden paint() skriver du sen din kod för att rita i Appleten. Jag har använt namnet Uppgift1 men du kan välja något annat, kom bara ihåg att spara koden i en fil med samma namn som klassen. Höjden och bredden på Appleten kan du givetvis ändra i HTML-filen om du vill. Ta sedan en titt i API-Dokumentation över klassen Graphics för att se vilka olika metoder som finns tillgängliga för att rita i appleten. Bläddra ner på sidan tills du kommer till en tabell som heter Method Summary. Där hittar du alla de publika metoder som kan anropas på Graphics-objektet (som metoden paint() tar som argument). Robert Jonsson Sida 1
Olika exempel är följande: drawline(int x1, int y1, int x2, int y2) som ritar ut en linje mellan punkterna (x1, y1) och (x2, y2). fillrect(int x, int y, int width, int height) som ritar en fylld rektangel med övre vänstra hörnet i punkten (x, y) och som är width pixlar bred och heigth pixlar hög. draw3drect(int x, int y, int width, int heigth, boolean raised) som ritar en upphöjd rektangel med en 3D effekt och har samma parametrar som fillrect men som dessutom har en boolean som reglerar om rektangeln ska vara upphöjd (true) eller nedsänkt (false). För att kunna se effekten måste en färg annan än svart användas. drawstring(string str, int x, int y) som skriver ut den text som finns i strängen str med början på punkten (x, y). Ritytan i en applet är uppdelad i punkter (pixlar) ordnade i ett koordinatsystem. Övre vänstra hörnet har koordinaten (0,0). Så för att t.ex. rita en linje som sträcker sig från detta hörn och 100 pixlar utefter den vänstra kanten, samt en 100 pixlar lång linje 50 pixlar ut från vänstra kanten skriver du följande kod i paint(): g.drawline(0, 0, 0, 100); g.drawline(0, 50, 0, 100); För att rita en fylld rektangel som är 75 pixlar bred och 150 pixlar hög och med övre vänstra hörnet i punkten (110, 25) skriver du: g.fillrect(110, 25, 75, 150); För att rita en upphöjd rektangel som är 60 pixlar bred och 50 pixlar hög och med det övre vänstra hörnet i punkten (10, 120) skriver du: g.draw3drect(10, 120, 60, 50, true); För att skriva ut texten Övning 2 på ritytan med början i punkten (80, 15) skriv: g.drawstring("övning 2", 80, 15); Du använder alltså objektet g (som är av typen Graphics) för att anropa metoderna. Och anrop görs som nämnts tidigare i lektionerna med punktnotation. Alltså namnet på objektet (som i detta fall är g), följt av en punkt, följt av den metod som ska anropas. Därefter anger du eventuella parametrar metoden behöver. För att ändra färgen på dina figurer använder du metoden setcolor() som tar ett Colorobjekt som argument. Ett nytt Color-objekt skapar du genom att skriva: new Color(int r, int g, int b) där int r, int g och int b motsvarar RGB-värdet på den nya färgen (0-255). Robert Jonsson Sida 2
Exempel på hur man byter till olika färger: g.setcolor(new Color(0, 0, 0)); // byter färg till svart g.setcolor(new Color(255, 255, 255)); // byter färg till vit g.setcolor(new Color(0, 255, 0)); // byter färg till grön g.setcolor(new Color(0, 0, 255)); // byter färg till blått g.setcolor(new Color(255, 0, 0)); // byter färg till rött g.setcolor(new Color(128, 10, 128)); // byter färg till??? När du satt färgen så gäller den för alla figurer som kommer efter i koden för färgbytet. Så ska alla figurer ha olika färger måste du byta färg för varje objekt. Vill du förändra bakgrundsfärgen i din Appleten måste du lägga till följande metod i klassen: public void init() { setbackground(new Color(255,0,0)); } Bakgrundsfärgen blir nu röd. Du kan även använda en av de fördefinierade färgerna i klassen Color. För att hitta åt vilka dessa färger är tittar du i API-dokumentationen för klassen Color (leta efter Field Summary ). För att använda någon av dessa färger skriver du Color.färg (där färg är någon av de giltiga färgerna). För att publicera appleten på Internet behöver du givetvis ett konto för detta. Här på Mittuniversitetet har du i och med att du registrerats på en kurs fått tillgång till ett konto (H:) i studentportalen (mina filer). Där finns en mapp med namnet public_html där du, om du vill, kan prova att lägga din html-fil samt.class -fil. Adressen till din hemsida blir http://portal.miun.se/~ditt_användarnamn. Du kan givetvis även köra din Applet lokalt på datorn. Antingen öppnar du din HTML-fil i en webbläsare eller så använder du dig av appletviewer. Om du har följt exemplen ovan så bör din Applet se ut som bilden till höger. Krav För att uppgiften skall betraktas som godkänd krävs det att du använder minst fem metoder (i Graphics-objektet) att rita på. Några av figurerna ska dessutom vara i olika färger. Försök gärna att skapa något riktigt t.ex. ett självporträtt, ett hus, en bil, träd etc och inte enbart massa meningslösa figurer, ägna dock ingen längre tid för detta. Koden ska även vara dokumenterad, där du i paint()-metoden beskriver vad som sker. Robert Jonsson Sida 3
Uppgift 2 Översikt Du ska i denna uppgift prova på att använda BufferedReader för att läsa in data från tangentbordet till program. Indata ska lagras i variabler i ditt program och sedan skrivas ut på skärmen. Uppgift Du ska skriva en klass med namnet Uppgift2 som ska innehålla en main()-metod. Detta program ska skapa en saga för ett barn. Programmet utgår från en färdigskriven saga, men vissa ord ska bytas ut mot sådant som användaren får skriva in. Den saga som du ska utgå ifrån är följande: Den lilla myran xx1xx Det var en gång en liten, liten myra som bodde med sin xx2xx och sina xx3xx syskon i en myrstack, vid en stor xx4xx i skogen. Den lilla myran hette xx1xx. För det mesta brukade xx1xx och hans syskon arbeta med att bära in xx5xx och xx6xx till stacken, men idag var det xx7xx, så därför var xx1xx ledig. Orden som är överstrukna är de ord programmet ska fråga användaren efter. Totalt är det sju inmatningar användaren ska göra. Dessa inmatningar ska programmet spara i separata variabler för att sen skrivas ut på skärmen enligt sagan ovan. De ord programmet ska fråga efter är: 1. Namnet på myran 2. Vem myran bor med 3. Hur många syskon myran har 4. Var någonstans i skogen myrstacken finns 5. Vad myran och syskonen bär in till stacken 6. Vad myran och syskonen mer bär in till stacken 7. Vad det är för speciell dag som gör att myran är ledig Krav För att uppgiften ska betraktas som godkänd krävs att du använder ett objekt av klassen BufferedReader när du frågar användaren efter data. All inmatning ska göras innan sagan skrivs ut på skärmen. Utskrift ska ske med System.out.print och/eller System.out.println. Robert Jonsson Sida 4
Uppgift 3 Översikt Du ska i denna uppgift prova på att skapa en klass med namnet Kurs och en testklass som skapar objekt av klassen Kurs. Syftet är att lära dig skriva klasser, skapa objekt av klasser och anropa publika metoder på det skapade objektet. Uppgift Skriv en klass som ska representera kurser som ges här på Mittuniversitetet. Klassen ska innehålla information om kursens kurskod, kursnamn, antal poäng och en beskrivning. Detta ska lagras som instansvariabler i klassen. Alla instansvariabler ska använda String som datatyp. Instansvariablerna får endast vara åtkomliga inom den egna klassen. Det ska finnas möjlighet att sätta nya värden på klassens alla instansvariabler. Detta ska implementeras via publika set()-metoder för alla instansvariabler. Det ska även finnas en metod som skriver ut all information om kursen på skärmen på ett snyggt och strukturerat sätt. Du ska även skriva en testklass som skapar två olika kurser (objekt av klassen Kurs). För det ena objektet ska du hårdkoda värden direkt i testklassen. Ex) java.setkursnamn("java I"); För det andra objektet ska du fråga användaren efter kursens data. Detta ska ske med hjälp av klassen JOptionPane och metoden showinputdialog(). Data som returneras från showinputdialog ska sparas i lokala variabler i main()-metoden för att sen skickas som argument till andra objektets set()-metoder. Tillsammans med denna uppgift ska du skicka in ett Word-dokument (eller annat) där du ritat ett UML-klassdiagram över klassen Kurs. Utgå ifrån de exempel som finns i kursboken samt i Lektion 2. Döp dokumentet till UML uppgift 3. Robert Jonsson Sida 5