PROGRAMMERING I SPRÅKET JAVA

Storlek: px
Starta visningen från sidan:

Download "PROGRAMMERING I SPRÅKET JAVA"

Transkript

1 PROGRAMMERING I SPRÅKET JAVA Innehåll 1. VI BÖRJAR PROGRAMMERA...2 INLEDNING...2 NEDLADDNING OCH INSTALLATION AV JAVA...2 JAVA MED TEXTPAD...3 JAVADOKUMENTATION...3 FÖRSTA PROGRAMMET I JAVA - UTMATNING...4 INMATNING MED STANDARDKLASSER...5 String och tecken...5 Heltal och decimaltal...6 AVRUNDNING...6 HELTALSDIVISION...6 ASCII-KOD...6 MATEMATISKA FUNKTIONER...7 URVAL OCH LOOPAR...7 FÄLT (ARRAY) GRAFISKA METODER...10 FÖNSTER (FRAME)...10 FÄRGER...10 LINJE I FÖNSTER...11 TEXT I FÖNSTER...11 INSTANSVARIABLER MED KONSTRUKTOR OCH OBJEKT...13 INLÄSNING AV VARIABLER APPLETS OCH GRAFISKA KOMPONENTER...15 APPLETS...15 PARAMETRAR I HTML-KODEN...16 GRAFISKA KOMPONENTER...17 Knapp...17 Textruta...18 Etikett (label)...19 Egenskaper hos komponenter...20 Rullningslist (scrollbar) MUS- OCH TANGENTHÄNDELSER...22 MUSHÄNDELSER...22 OVERRIDE PÅ UPDATE...23 RITA UTAN PAINT...25 TANGENTHÄNDELSER ANIMERING MED TRÅDAR...27 TRÅDAR OCH MULTITASKING...27 MULTIPELT ARV OCH GRÄNSSNITT I JAVA...27 KLASSEN THREAD OCH GRÄNSSNITTET RUNNABLE...27 TVÅ TRÅDAR...28 TRÅDAR I EGEN KLASS KLASSER I EGNA FILER...32 EGEN KLASSFIL...32 /home/micko/skrivbord/java_lektioner.doc

2 1. Vi börjar programmera Inledning Denna kurs i Java-programmering bygger på goda kunskaper i språket C++ och på att begrepp som variabler, urval, loopar, objekt etc. är kända. Kan man C++ är det dock relativt enkelt att lärar sig Java, eftersom Java till härstammar ifrån och till stor del har samma syntax som C++. Språket Java skapades 1991 av den kanadensisk-amerikanske programmeraren James Gosling vid dataföretaget Sun Microsystem och blev allmänt tillgängligt Ursprungligen var Java tänkt som ett språk för konsumentartiklar (typ tvättmaskiner), men kom i början främst att användas för bla grafiska effekter med s k applets på Internet. Java har emellertid nu slagit igenom stort och i viss mån ersatt traditionella språk som C++. Java har många fördelar: Syntaxen är i stort sett identisk med C++. Java är därför relativt enkelt att lära sig för den som redan kan C eller C++. Det är plattformsoberoende, d v s ett program kan köras i olika operativsystem (Windows 2000, Unix etc.) utan att ändras. Det innehåller grafiska verktyg såsom knappar och textrutor (som VB) även om programmeringen görs i en texteditor. Det stödjer s k trådar (threads). Exempelvis kan det rita upp en bild samtidigt som det gör en inläsning. Det kan användas på Internet för att skapa dynamiska funktioner på webbsidor. Detta görs med javaapplets. Det saknar pekare, vilket innebär att ett program i Java ofta är enklare att förstå än i C++. Java har också några nackdelar: Det är ett s k interpreterande (d v s översätter kod vid varje exekvering) språk och därför långsammare än t ex C++. Detta kompenseras dock av att dagens datorer är så pass snabba att detta ofta inte är något hinder. Det är ett innehållsrikt språk med väldigt många färdiga standardklasser (bl a för grafik) som kan vara svåra att få grepp om. Man behöver dock inte lära sig allt på en gång. I denna javakurs berörs främst syntax och begrepp som skiljer sig från C++, som tas upp i kursdokumentet Nedladdning och installation av Java En av fördelarna med Java är att utvecklingsmiljön JDK (Java Development Kit, som bl a innehåller kompilatorn) är gratis. Programmet (52 MB) j2sdk-1_4_2_07-windows-i586-p.exe laddas ner från företaget Suns hemsida till din dator. När programmet installeras skapas mappen c:/ j2sdk1.4.2_07, där programmet packas upp. Javaprogrammen utvecklade med JDK och körs sedan i konsollmiljö, d v s programmen skrivs i en textredigerare typ Anteckningar och de kompileras och exekveras i MS-DOS via Kommandotolken i Tillbehör. I mappen c:/ j2sdk1.4.2_07/bin finns bl a filen javac.exe, som använs för att kompilera javaprogram. Väljer vi att spara våra javaprogram i en annan mapp än mappen bin ovan, vilket är det vanligaste, måste sökvägen anges till bin-mappen så att filen /home/micko/skrivbord/java_lektioner.doc

3 javac.exe hittas. Detta är krångligt. För att slippa ange sökvägen kan vi istället lägga in en sökväg (path) till mappen bin via Kontrollpanelen/System/Avancerat/Miljövariabler. Markera Path i den undre rutan och klicka på knappen Redigera. Skriv där in sökvägen C:\j2sdk1.4.2_07\bin, enligt urklippet intill. Javaprogram kan nu kompileras och köras (exekveras) via kommandotolken. Java med TextPad För att slippa skriva javaprogrammen i Anteckningar och kompilera och exekvera i DOS-miljön skall vi använda oss av editeringsprogrammet TextPad. Programmet (2Mb) laddas ner från Installera programmet och öppna det sedan via Start/Alla program. Programmet TextPad är en mer avancerad editor än Anteckningar, bl a görs automatisk indentering och färgning av texten. Dessutom kan javaprogrammen kompileras och köras i TextPad, utan att sökvägen till bin-mappen i Miljövariabel behöver anges (som i förra stycket). Programmet kompileras och körs via menyvalet Tools/Compile Java (Ctrl+1) respektive Tools/Run Java Application (Ctrl+2). Javadokumentation Java är ett stort språk med väldigt många standardklasser och metoder. Detta finns samlat i en dokumentation som kan laddas ner som ett zippat dokument (30 MB) från Suns hemsida Uppackat blir dokumen knappt 200 MB stort. Dokumentet finns även uppackat i j:/anders_a/java/javadokumentation/index.html. /home/micko/skrivbord/java_lektioner.doc

4 Första programmet i Java - utmatning Skriv in följande program i TextPad: class test1{ //Klamrar på samma rad (ej som i C++) public static void main(string args[]){ //main-metoden börjar System.out.println("Det funkar i textpad!"); //Ger utskrift System.out.println("Deta är andra raden"); //println, ny rad efter utskrift System.out.print("Tredje raden"); //print, ej ny rad efter utskrift System.out.print("Fjärde raden"); //main-metoden slutar Programmets enda klass heter test1, som kan ses som programmets namn. Källkodfilen skall ha samma namn som programmet. Spara därför programmet som test1.java i mappen java, där du i fortsättningen sparar alla dina javaprogram. Filslutet.java anger att det är en källkodfil för ett javaprogram. Kompilera nu programmet till bytekod (andra program kompilerar direkt till maskinkod). Då skapas klassfilen test1.class, som är plattformsoberoende. När klassfilen sedan körs med en javatolk interpreteras den till maskinkod. Ordet public anger att main-metoden (som i C++) är åtkomlig utifrån klassen (programmet) test1, vilket den måste vara för att den skall kunna anropas av av interpretatorn. Ordet static anger att main-metoden är en s k klassmetod (eller statisk metod), d v s en metod som inte hör till ett visst objekt. Parametern String args[] i main-metoden skall alltid vara med för att main-metoden skall kunna anropas med en parameter, vilket dock sällan görs. Följande program illustrerar variabeldeklaration och addition. Observera likheterna med C++: class test3{ public static void main(string args[]){ int a,b=5; double c=3.33; a=7; System.out.println("Summan är " + (a+b) +" och decimaltalet " + c); Utelämnas parentesen runt additionen (a+b) i utskriften blir värdet 75. /home/micko/skrivbord/java_lektioner.doc

5 Inmatning med standardklasser Som du såg i förra exemplen är utskrift i textfönstret i Java relativt enkelt. Inläsning från tangentbordet är krångligare. Främsta skälet till detta är att Java oftast använder grafiska gränssnitt och därför saknar bra standardklasser för konsollprogrammering. String och tecken Följande program läser in och skriver ut två textsträngar: import java.io.*; //Standardpaketet java.io.* innehåller metoder för in- och utmatning. class test3{ public static void main(string args[]) throws IOException{ //Tar hand om fel i readline() String fnamn, enamn; //Klassen String används (jämför med C++) BufferedReader in=new BufferedReader(new InputStreamReader(System.in));//krångligt System.out.print("Ange ett förnamn: "); fnamn=in.readline(); //Förnamnet läses in System.out.print("Ange ett efternamn: "); enamn=in.readline(); //Efternamnet läses in System.out.println("Du matade in namnet " + fnamn + " " + enamn); Vad den krångliga raden som skapar (objekt-) strömmen in för inläsning egentligen innebär bryr vi oss inte om. Enskilda tecken (char) plockas enklast ur en inläst string: System.out.print("Ange en tecken: "); String s=in.readline(); System.out.println("Du matade in tecknet " + s.charat(0)); //Ger strängens första tecken String-metoden s.charat(n) plockar ut n:te tecknet ur strängen s. Följande metoder finns för hantering av strängar, d v s metoder i klassen String: str.length() //ger antalet tecken i str str.charat(n) //ger tecknet i position n str.substring(n) //ger den delsträng som börjar i position n str.substring(n,m) //ger den delsträng som börjar i position n och slutar i m-1 str.compareto(str2) //ger 0 om str = str2, <0 om str kommer före str2 annars >0 str.equals(str2) //true om str och str2 är lika, annars false str.equalsignorecase(str2) //samma som ovan, men skiljer inte på stora och små bokstäver str.startswith(str2) //true om str inleds med strängen str2, annars false str.startswith(str2,n) //true om strängen str2 börjar i position n i str, annars false str.endswith(str2) //true om str avslutas med strängen str2, annars false str.indexof(c) //ger första positionen om tecknet c finns i strängen str, annars -1 str.indexof(c,n) //letar från position n efter första platsen för tecknet c str.lastindexof(c) //ger sista positionen om tecknet c finns i strängen str str.lastindexof(c,n) //letar från position n efter sista platsen för tecknet c str.indexof(str2) //ger första positionen för delsträngen str2 i str str.indexof(str2,n) //letar från position n efter första platsen för strängen str2 str.lastindexof(str2) //ger sista positionen om delsträngen str2 finns i strängen str str.lastindexof(str2,n) //letar från position n efter sista platsen för delsträngen str2 str.trim() //returnerar str utan inledande och avslutande blanktecken str.replace(c1,c2) //ersätter alla tecken c1 med tecken c2 (å, ä och ö går ej att ersätta) str.touppercase() //ändrar till enbart stora bokstäver str.tolowercase() //ändrar till enbart små bokstäver String.valueOf(x) //omvandlar x till en sträng (x är enkel taltyp: int, double osv) /home/micko/skrivbord/java_lektioner.doc

6 Heltal och decimaltal All inläsning görs som strängar och omvandlas sedan till t ex integer eller double. Följande program läser in och skriver ut hel- och decimaltal: import java.io.*; class test3{ public static void main(string args[]) throws IOException{ int i; double d; String s; BufferedReader in=new BufferedReader(new InputStreamReader(System.in)); System.out.print("Ange ett heltal: "); s=in.readline(); i=integer.parseint(s); //Omvandlar sträng till heltal System.out.println("Du matade in heltalet " + i); System.out.print("Ange ett decimaltal: "); s=in.readline(); d=double.parsedouble(s); //Omvandlar sträng till decimaltal System.out.println("Du matade in decimaltalet " + d); Metoderna parseint(s) och parsedouble(s) tillhör klasserna Integer respektive Double. Inläsning till heltal direkt kan göras med följande sats: int antal=integer.parseint(in.readline()); Avrundning Även avrundning är ganska krånkligt i Java. Följande program avrundar till tre decimaler: import java.io.*; import java.text.*; //Klassen NumberFormat finns i detta paket class test3{ public static void main(string args[]) throws IOException{ double d= ; NumberFormat r = NumberFormat.getInstance(); //Instans av redigerare r r.setmaximumfractiondigits(4); //Formaterar utrskrift till högst 4 decimaler System.out.println("Med fyra decimaler: " + r.format(d) ); //Omvandlar decimaltalet d till //en sträng med 4 decimaler Heltalsdivision Fungerar på samma sätt som i C++, d v s är båda termerna heltal blir kvoten ett heltal. Problemet löses med casting, d v s omtypning. ASCII-kod ASCII-koden erhålls i Java liksom i C++ genom omtypning av ett tecken: String s="anders"; System.out.println("ASCII-koden för femte tecknet: " + (int)s.charat(4)); Tecknet för motsvarande ASCII-kod fås på omvänt sätt: int i=232; System.out.println("Tecknet är: " + (char)i); /home/micko/skrivbord/java_lektioner.doc

7 Matematiska funktioner Klassen Math i Java har några metoder (funktioner) som C++ saknar. Följande program visar vilka: import java.io.*; import java.lang.*; //Innehåller klassen Math. Paketet behöver inte importeras, finns alltid med. class test3{ public static void main(string args[]) throws IOException{ System.out.println(Math.PI); //Ger pi med 15 decimaler System.out.println(Math.pow(5,2)); //25.0 System.out.println(Math.sqrt(49)); //7.0 System.out.println(Math.random()); //Slumptal mellan 0-1. Blandas automatiskt. System.out.println(Math.max(5,8)); //8 System.out.println(Math.min(5,8)); //5 System.out.println(Math.round(5.5)); //6 Observera att klassnamnet Math måste föregå metodanropet. Nedan följer en sammanställning av de matematiska metoderna: Math.abs(a) //absolutvärdet eller beloppet av talet a Math.max(a,b) //ger det största av talen a och b Math.min(a,b) //ger det minsta av talen a och b Math.PI //talet π Math.E //talet e = 2,7 Math.exp(x) //ger e x Math.log(x) //ger naturliga logaritmen av x Math.sqrt(x) //ger kvadratroten av x Math.ceil(x) //rundar av uppåt till heltal Math.floor(x) //rundar av nedåt till heltal Math.pow(x,y) //ger x y Math.round(x) //avrundar till heltal av typ long Math.random() //ger slumptal mellan 0 och 1 Math.sin(x) //x anges i enheten radianer Math.cos(x) Math.tan(x) Math.asin(x) //arcsin(x), motsvarar miniräknarens sin -1. Returnerar ett värde i radianer. Math.acos(x) Math.atan(x) Urval och loopar Urval med if och case, samt looparna for och while har samma syntax i Java som i C++. /home/micko/skrivbord/java_lektioner.doc

8 Fält (array) I Java är fält dynamiska så till vida att storleken kan anges vid exekveringen (jämför med pekare i C++). Dessutom innehållet klassen Arrays metoder för bl a sortering, sökning och jämförelse av fält. Följande program illustrerar hur en vektor fylls med hela slumptal mellan, sorteras i stigande ordning, samt slutligen skrivs ut igen: import java.io.*; import java.lang.math; import java.util.arrays; //Importerar klassen Arrays för att kunna sortera fältet nedan class test3{ public static void main(string args[]) throws IOException{ int [] a=new int[10]; //Deklarerar fältet med new (påminner om pekare i C++) for (int i=0;i<10;i++) a[i]=(int)(math.random()*5)+1; //Fyller fältet med slumptal mellan 1 och 5 Arrays.sort(a); //Sorterar fältet i stigande ordning for (int i=0;i<10;i++) System.out.println(a[i]); Sortering av strängar görs på liknande sätt. Sorteringen fungerar dock endast om hela det deklarerade fältet är fyllt. Deklarationen av fältet görs därför efter inläsningen av fältets storlek: System.out.print("Ange hur många namn som skall matas in: "); int antal=integer.parseint(in.readline()); //Omvandling till heltal görs direkt String [] a=new String[antal]; Klassen Arrays innehåller bl a följande användbara metoder: a.length //Ger antalet komponenter i a (tillhör ej klassen Arrays) Arrays.equals(a,b) //Returnerar true om fälten a och b är lika (komponenter och antal) Arrays.fill(a,b) //Ger alla komponenterna i fältet a värdet b Arrays.fill(a,m,n,b) //Returnerar komponenterna nr m till n-1 I fältet a värdet b Arrays.sort(a) //Sorterar komponenterna i a i stigande ordning Arrays.sort(a,m,n) //Sorterar komponenterna nr m till n-1 i a i stigande ordning binarysearch(a,b) //Söker efter variabeln b i fältet a. Returnerar b:s index om den finns, annars -1 Övning 1.1: Skriv ett program som skriver ut följande textsträng på skärmen: Detta är kul. Detta är kul. Detta är kul. Övning 1.2: Skriv ett program som läser in ett namn och sedan skriver ut det på skärmen på tre rader: Vad heter du: Anders Andersson Var bor du? Skoghall Du heter Anders Andersson och bor i Skoghall Du heter Anders Andersson och bor i Skoghall Du heter Anders Andersson och bor i Skoghall Övning 1.3: Skriv ett program som beräknar resten vid division mellan två heltal. Programmet skall ha följande utskrift: Ange taljare: 16 Ange namnare: 6 Rest vid division: 4 Heltalsdivision: 2 Kvot med alla decimaler: /home/micko/skrivbord/java_lektioner.doc

9 Kvot med tre decimaler: Övning1.4: Skriv ett program som läser in en textrad och antal gånger som den skall skrivas ut och som sedan skriver ut texten, med följande utskrift: Ange en text: Jag gillar Java Antal gånget texten skall skrivas ut: 4 1: Jag gillar Java 2: Jag gillar Java 3: Jag gillar Java 4: Jag gillar Java Övning 1.5: Skriv ett program som läser in en sträng och som sedan skriver ut antal tecken, texten med versaler, ersätter alla mellanslag ( ) med bokstaven a, samt skriver ut texten baklänges, enligt följande exempel: Ange en text: Jag gillar Java Antal tecken: 15 JAG GILLAR JAVA JagagillaraJava avaj rallig gaj Övning 1.6: Skriv ett program som läser in två namn och som sedan skriver ut dem i bokstavsordning med en if-sats, med följande utskrifter: Ange första namnet: kalle Ange andra namnet: anders I bokstavsordning: anders kalle Övning 1.7: Skriv ett program som läser in namn och som sedan sorterar dem och skriver ut dem i bokstavsording, med följande utskrifter: Hur många namn skall läsas in: 4 Skriv in namn 1: kalle Skriv in namn 2: eva Skriv in namn 3: anna Skriv in namn 4: bengt I bokstavsordning: anna, bengt, eva, kalle, Övning 1.8: Skriv ett program som beräknar hypoteunsan med Pythagoras sats avrundad till ett heltal, med följande utskrift: Ange ena kateten: 12 Ange andra kateten: 19 Hypotenusan avrundad till heltal: 22 Övning 1.9: Beräkna summan för olika värden på N. Vad blir summan om man N tar med många termer? /home/micko/skrivbord/java_lektioner.doc

10 2. Grafiska metoder Hittills har programmen körts i konsollfönstret. Java har dock stora grafiska möjligheter. Vi skall inledningsvis skapa ett fönster. Sedan fyller vi detta med linjer, polygoner och texter via grafiska metoder. Därefter lär vi oss att hantera grafiska komponenter som knappar och textrutor. Fönster (frame) I Java API (Application Programming Interface) finns paketet java.awt (Abstract Window Toolkit), som innehåller många klasser för hantering av grafik, text, färger och komponenter som knappar och textrutor. Ur detta paket behöver vi strax klasserna Graphics, Font och Color. Vi importerar dem därför med följande satser: import java.awt.graphics; import java.awt.font; import java.awt.color; Eller kortare: Paketet java.awt innehåller en klass Frame, som automatiskt öppnar ett fönster när man skapar ett objekt av klassen. Eftersom vårt program skall ha samma egenskaper som klassen Frame, måste det ärva Frame:s egenskaper. Följande program skapar ett fönster: class test4 extends Frame{ //extends anger att klassen test4 ärver av Frame test4() { setbackground(color.yellow); setsize(400,150); //Konstruktor för klassen test4 //Anger fönstrets bakgrundsfärg //Anger fönstrets storlek public static void main(string args[]) { //Main-funktionen test4 d=new test4(); //Skapar objektet d av klassen test4 (fönstret skapas) d.setvisible(true); //Fönstret görs synligt med Frame-metoden setvisible Observera att fönstret inte kan stängas med systemknappen. Stäng istället via konsollfönstret. Färger Färgen kan även anges mer fritt på RGB-format. Ett färgobjekt av klassen Color måste då först skapas: Color c=new Color(200,0,0); setbackground(c); Följande färger finns fördefinierade (anges med Color.): //Skapar objektet c av klassen Color med RGB-färgen (200,0,0) d v s röd black, blue, cyan, gray, darkgray, lightgray, green, magenta, orange, pink, red, white, yellow Övning 2.1: Kopiera och modifiera ovanstående programexempel så att bakgrunden får en slumpmässig färg varje gång fönstret öppnas. Övning 2.2: Modifiera föregående övning ytterligar så att även fönstrets storlek öppnas med slumpmässig storlek. /home/micko/skrivbord/java_lektioner.doc

11 Linje i fönster Klassen Graphics innehåller grafiska metoder som bl a ritar streck och polygoner, samt text. Följande program bygger vidare på förra exemplet och ritar en linje i fönstret: class test4 extends Frame{ test4() { setbackground(color.yellow); setsize(400,400); public void paint(graphics g){ //Metoden paint anropas automatiskt när fönstret skapas g.setcolor(color.red); //Grafikfärg g.drawline(100,100,300,300); //Linjen ritas mellan koordinaterna (100, 100) och (300, 300) public static void main(string args[]) { test4 d=new test4(); d.setvisible(true); Observera att metoden paint anropas automatiskt när fönstret skapas eller ändras. Övning 2.3: Modifiera ovanstående exempel så att ett slumpmässigt antal (1-10) linjer ritas ut i fönstret med slumpmässiga färger. Fönstrets bakgrundsfärg skall vara grå. Text i fönster Följande program ritar en linje och lägger in text: class test4 extends Frame{ test4() { setbackground(color.yellow); setsize(400,400); public void paint(graphics g){ g.setcolor(color.red); g.drawline(100,100,300,300); g.drawstring("det funkar!",200,200); //Skriver ut en textsträng o koordinaten (200, 200) public static void main(string args[]) { test4 d=new test4(); d.setvisible(true); Texten som skriv ut är oformaterad, men kan formateras med klassen Font. Följande rad visar ett exempel på hur texten kan formateras med Font-variabeln f (objektet f av klassen Font): Font f=new Font("Arial",Font.BOLD,24); //Typsnitt (ett fåtal stöds), stil, storlek För stilen finns även Font.ITALIC och Font.PLAIN. Kombinationer av olika stilar anges med: Font.BOLD+Font.ITALIC Följande programexempel illustrerar hur det fungerar genom att modifiera föregående exempel: /home/micko/skrivbord/java_lektioner.doc

12 class test4 extends Frame{ Font f=new Font("Arial",Font.BOLD,24); test4() { setbackground(color.yellow); setsize(400,400); public void paint(graphics g){ g.setcolor(color.red); g.drawline(100,100,300,300); g.setcolor(color.green); g.setfont(f); g.drawstring("det funkar!",200,200); //Objektet f av klassen Font deklareras //Grafikfärgen ändras för texten //Den valda fonten sätts public static void main(string args[]) { test4 d=new test4(); d.setvisible(true); Följande metoder finns för klassen Graphics: drawline(x1,y1,x2,y2); //Ritar en linje mellan koordinaterna (x1, y1) och (x2, y2) drawrect(x,y,b,h); //Ritar en rektangel med övre vänstra hörnet i (x, y), bredd b och höjd h fillrect(x,y,b,h); //Fyller rektangeln drawroundrect(x,y,b,h,m,n) //Rektangel med rundade hörn, där m och n anger rundning fillroundrect(x,y,b,h,m,n) //Fyller rundad rektangel draw3drect(x,y,b,h,upp) //Tredimensionell rektangel, upp är tru elle false fill3drect(x,y,b,h,upp) //Fyller en tredimensionell rektangel drawoval(x,y,b,h) //Ritar en oval filloval(x,y,b,h) //Fyller en oval drawarc(x,y,b,h,s,l) //Ritar en båge, där s är startpunkt ock I slitpunkt I grader drawpolygon(xp,yp,n) //Ritar en polygon. Koordinaterna (n st) ligger i fälten xp och yp fillpolygon(xp,yp,n) //Fyller polygonen Övning 2.4: Modifiera föregående övning så att fönstret fylls med 100 slumpmässigt utritade och färglagda cirklar med diametern 100 pixlar. Fönstrets bakgrundsfärg skall vara grå. *Övning 2.5: Modifiera föregående övning så att fönstret fylls med 10 slumpmässigt utritade och färglagda lika stora polygoner. Välj själv polygonens antal hörn och utseende i programkoden. Fönstrets bakgrundsfärg skall vara grå. /home/micko/skrivbord/java_lektioner.doc

13 Instansvariabler med konstruktor och objekt I förra exemplet var linjens ändpunkter i paint-metoden fixerade. Vill kunna variera ändpunkternas koordinater är det lämpligt att tilldela dem i main-metoden. Eftersom Java bygger på klasser måste klassen test4 först få instansvariabler (samma som datamedlemmar i C++) för ändpunkterna (x1, y1) och (x2, y2), som kan tilldelas antingen via en konstruktor eller via ett objekt. Nedan visas båda varianterna. Först med konstruktor: class test4 extends Frame{ Font f=new Font("Arial",Font.BOLD,24); int x1,y1,x2,y2; //Instansvariabler (datamedlemmar) test4(int a1,int b1,int a2,int b2) { //Variablerna tilldelas via konstruktorn x1=a1; y1=b1; x2=a2; y2=b2; setbackground(color.yellow); setsize(400,400); public void paint(graphics g){ g.setcolor(color.red); g.drawline(x1,y1,x2,y2); //Instansvariablerna används i metoden paint g.setcolor(color.green); g.setfont(f); g.drawstring("det funkar!",200,200); public static void main(string args[]) { int x=0, y=50, v=200, w=250; test4 d=new test4(x,y,v,w); d.setvisible(true); //Konstruktorn anropas Följande exempel gör samma sak, men här tilldelas instansvariablerna via objektet d: class test4 extends Frame{ Font f=new Font("Arial",Font.BOLD,24); int x1,y1,x2,y2; test4() { setbackground(color.yellow); setsize(400,400); public void paint(graphics g){ g.setcolor(color.red); g.drawline(x1,y1,x2,y2); g.setcolor(color.green); g.setfont(f); g.drawstring("det funkar!",200,200); public static void main(string args[]) { test4 d=new test4(); d.x1=100; d.y1=50; d.x2=200; d.y2=350; d.setvisible(true); //Instansvariablerna tilldelas via objektet d /home/micko/skrivbord/java_lektioner.doc

14 Inläsning av variabler Följande exempel visar hur koordinaterna läses in i main-metoden. Observera att inläsning och omvandling från string- till int-typ görs i en sats: import java.io.*; class test4 extends Frame{ Font f=new Font("Arial",Font.BOLD,24); int x1,y1,x2,y2; test4() { setbackground(color.yellow); setsize(400,400); //Objektet f av klassen Font deklareras public void paint(graphics g){ g.setcolor(color.red); g.drawline(x1,y1,x2,y2); g.setcolor(color.green); g.setfont(f); g.drawstring("det funkar!",200,200); //Grafikfärgen ändras för texten //Den valda fonten sätts public static void main(string args[]) throws IOException { BufferedReader in=new BufferedReader(new InputStreamReader(System.in)); test4 d=new test4(); System.out.print("Ange första x-värdet: "); d.x1=integer.parseint(in.readline()); //Inläsning och omvandling görs i en sats. System.out.print("Ange första y-värdet: "); d.y1=integer.parseint(in.readline()); System.out.print("Ange andra x-värdet: "); d.x2=integer.parseint(in.readline()); System.out.print("Ange andra y-värdet: "); d.y2=integer.parseint(in.readline()); d.setvisible(true); Övning 2.6: Skriv ett program som frågar efter hur många hörn en polygon skall ha och som sedan läser in x- och y-koordinater och ritar/fyller polygonen. Ledning: Läs in antal hörn och koordinaterna i main-metoden i en for-loop: test4 d=new test4(); System.out.print("Ange antal hörn: "); d.ant_horn=integer.parseint(in.readline()); for (int i=0;i<d.ant_horn;i++) { System.out.print("Ange x-värdet: "); d.xp[i]=integer.parseint(in.readline()); System.out.print("Ange y-värdet: "); d.yp[i]=integer.parseint(in.readline()); Samt deklarera tre instansvariabler i klassen test4: int [] xp=new int[10]; int [] yp=new int[10]; int ant_horn; //Maximalt tio hörn //Anger antal hörnpunkter /home/micko/skrivbord/java_lektioner.doc

15 3. Applets och grafiska komponenter Hittills har vi skrivit fristående javaprogram, främst för att lära oss grunderna i språkets syntax. Ofta används dock javaprogram i samband med webbsidor och då behövs inte JDK:s javatolk för att köra/interpretera det kompilerade programmet (class-filen), eftersom de vanligaste webbläsarna kan köra javaprogram s k javaapplets. En applet (förkortning av applikation) är alltså ett fristående javaprogram som kan köras av en webbläsare. Detta innebär att konsollmiljöns inläsningar inte fungerar i applet, där inläsningar istället görs via bl a textrutor som i Visual Basic. Detta återkommer vi till senare. Applets Vi börjar med att göra om exemplet på sidan 12 till en applet: public class test4 extends Applet{ //Klassen Applet i paketet applet importeras //Klassen test4 ärver egenskaperna från klassen Applet Font f; //Objektet f av klassen Font deklareras public void init() { //Metoden init anropas när test4 skapas, d v s först f=new Font("Arial",Font.BOLD,24); setbackground(color.yellow); public void paint(graphics g){ //Metoden paint anropas när skärmen ändras g.setcolor(color.red); g.drawline(100,100,300,300); g.setcolor(color.green); //Grafikfärgen ändras för texten g.setfont(f); //Den valda fonten sätts g.drawstring("det funkar!",200,200); Det finns tre huvudsakliga skillnader mellan ett fristående program och en applet: 1. Istället för från standardklassen Frame ärver klassen test4 sina egenskaper från standardklassen Applet, som har liknande egenskapre som Frame. Fönstret som klassen Applet skapar kan dock inte visas fristående utan webbläsaren. 2. En applet saknar en main-metod. Istället är det webbläsaren som skapar första objektet av klassen test4. 3. Klassen test4 saknar konstruktor. Initieringar görs istället i metoden init. Fönstrets storlek anges i webbläsaren. Programmet kompileras som förut till en class-fil, som exekveras av webbläsaren (se nedan). Appleten kan dock enkelt testköras med programmet AppletViewer via TextPad:s menyval Tools/Run Java Applet. Under menyvalet Applet i AppletViewer finns några funktioner. I webbläsaren körs appleten med följande HTML-kod: <html> <head> <title> Min hemsida </title> </head> <body> Detta är min hemsida. <applet code="test4.class" width=500 height=300> </body> </html> /home/micko/skrivbord/java_lektioner.doc

16 Attributet code får filnamnet för appleten, och attributen width och height ger fönstrets storlek. Spara HTML-koden i programmet Anteckningar med filändelsen.html (eller.htm) och öppna filen i webbläsaren. Alternativt sparas HTML-koden på motsvarande sätt i TextPad. Webbsidan kan sedan visas via menyvalet View/In Web Browser. Parametrar i HTML-koden Parametrar (variabler) i appleten kan anges i HTML-koden. I följande exempel anges texten som skall skrivas ut i appleten, samt textens storlek i HTML-koden. Först visas HTML-koden: <html> <head> <!--Kommentar i HTML--> <title> Min hemsida </title> </head> <body> Detta är min hemsida. <applet code="test4.class" width=500 height=300> <param name="t" value="detta är texten"> <!--parametern t får värdet Detta är texten --> <param name="storlek" value="80"> <!--parametern storlek får värdet 80--> </body> </html> Javaprogrammet läser in värdet på parametrarna t och storlek från HTML-filen: public class test4 extends Applet{ Font f; String text, textstorlek; int storlek; public void init() { textstorlek=getparameter("storlek"); //Värdet på parametern storlek hämtas till textstorlek storlek=integer.parseint(textstorlek); f=new Font("Arial",Font.BOLD,storlek); text=getparameter("t"); //Värdet på parametern t hämtas till variabeln text setbackground(color.yellow); public void paint(graphics g){ g.setcolor(color.red); g.drawline(100,100,300,300); g.setcolor(color.green); g.setfont(f); g.drawstring(text,200,200); All hantering av grafik läggs alltså i metoden paint. Övning 3.1: //Grafikfärgen ändras för texten //Den valda fonten sätts //Texten skrivs ut via variabeln text Skriv och provkör en applet som ritar ut ett antal slumpmässigt placerade fyllda cirklar med slumpmässig färg. Antalet cirklar och cirklarnas storlek skall anges som parametrar i HTMLkoden. /home/micko/skrivbord/java_lektioner.doc

17 Grafiska komponenter Kommunikationen med javaprogram sker ofta via grafiska komponenter av samma typ som i Visual Basic. Java har för detta ett antal standardklasser för grafiska komponenter, såsom t ex knapp, label (etikett), kryssruta, alternativknapp, listruta, textruta och rullningslist. Samtliga klasser finns i paketet java.awt.*. Vi kommer nedan att ta upp dessa standardklasser och hur olika händelser hanteras, t ex knapp- och tangenttryckningar och musklickningar. Knapp Knappar skapas av klassen Button. Programmet nedan innehåller två knappar, som byter till röd respektive grön färg på bakgrunden: public class test4 extends Applet{ public void init() { setbackground(color.yellow); Button knappa=new Button("Röd"); add(knappa); Button knappb=new Button("Grön"); add(knappb); //Objektet knappa skapas med texter Röd //Knappen läggs ut i webbfönstret //Motsvarande för knapp med text Grön public boolean action(event evt,object arg){ String text=(string)arg; if (evt.target instanceof Button){ if (text.equals("röd")) setbackground(color.red); if (text.equals("grön")) setbackground(color.green); return true; //action reagerar på en händelse //arg innehåller knappens (komponentens) text //evt kollar typ av komponent (klass) Observera att knapparna centreras i fönstret från vänster i den ordning de skapas. Senare kommer vi att placera ut dem på ett sätt vi själva väljer. Vi modifierar programmet så att en slumpmässig färg används när knappb aktiveras. Koden för detta läggs lämpligen i en egen metod slumpfarg. Programmet får då följande utseende: public class test4 extends Applet{ public void init() { setbackground(color.yellow); Button knappa=new Button("Röd"); add(knappa); Button knappb=new Button("Slumpfärg"); add(knappb); public void slumpfarg(){ int r=(int)math.round(255*math.random()); int g=(int)math.round(255*math.random()); int b=(int)math.round(255*math.random()); Color c=new Color(r,g,b); setbackground(c); /home/micko/skrivbord/java_lektioner.doc

18 public boolean action(event evt,object arg){ String text=(string)arg; if (evt.target instanceof Button){ if (text.equals("röd")) setbackground(color.red); if (text.equals("slumpfärg")) slumpfarg(); return true; Klassen Button har två konstruktorer för knappen k: Button k=new Button(); Button k=new Button( Tryck ); //Ger en textlös knapp //Ger knappen texten Tryck Nedan visas några användbara metoder för textrutan t: k.setlabel( Text ); String texten=k.getlabel(); Textruta //Placerar texten Text på knappen //Returnerar knapptexten till variabeln texten Textrutor skapas av klassen TextField. I programmet nedan färgas bakgrunden av den färg som matas in i textrutan: public class test4 extends Applet{ TextField rutan1; public void init() { setbackground(color.yellow); Button knappa=new Button("Textfärg"); add(knappa); Button knappb=new Button("Slumpfärg"); add(knappb); rutan1=new TextField("Skriv här",10); add(rutan1); //Objektet rutan1 skapas //Placerar textrutan I fönstret public void slumpfarg(){ int r=(int)math.round(255*math.random()); int g=(int)math.round(255*math.random()); int b=(int)math.round(255*math.random()); Color c=new Color(r,g,b); setbackground(c); public void textfarg(){ if (rutan1.gettext().equals("g")) setbackground(color.green); if (rutan1.gettext().equals("r")) setbackground(color.red); if (rutan1.gettext().equals("b")) setbackground(color.blue); if (rutan1.gettext().equals("y")) setbackground(color.yellow); //Metoden gettext() returnerar texten i textrutan public boolean action(event evt,object arg){ /home/micko/skrivbord/java_lektioner.doc

19 String text=(string)arg; if (evt.target instanceof Button){ if (text.equals("textfärg")) textfarg(); return true; if (text.equals("slumpfärg")) slumpfarg(); Klassen TextField har några olika konstruktorer för en textruta t: TextField t=new TextField(); TextField t=new TextField(10); TextField t=new TextField("Skriv här"); TextField t=new TextField("Skriv här",n); Nedan visas några användbara metoder för textrutan t: t.setcolumns(n) String texten=t.gettext(); t.settext( Detta står i textrutan ); t.setechochar( * ); t.selectall(); t.select(i,j); texten=t.getselectedtext(); Etikett (label) //Metoden textfärg anropas //Ger ett tomt textfält //Ger ett textfält med plats för 10 tecken //Ger ett textfält med texten Skriv här //Ger ett textfält med texten Skriv här och med n positioner //Antal teckenpositioner sätts till n //Textrutans innehåll returneras alltid som typen String //Tilldelar textrutan en text //Hemlig text, en * visas istället för tecknen //All text markeras //Tecknen i till j markeras //Returnerar markerad text Etiketter skapas av klassen Label. I programmet nedan skrivs innehållet i textrutan ut högerjusterat i en label när knappen aktiveras: public class test4 extends Applet{ TextField te; Label la; public void init() { setbackground(color.yellow); Button knappa=new Button("Tryck"); add(knappa); te=new TextField("Skriv här",10); add(te); la=new Label("Detta är en label",label.right); add(la); //Etiketten la skapas högerjusterad public boolean action(event evt,object arg){ String text=(string)arg; if (evt.target instanceof Button){ if (text.equals("tryck")) la.settext(te.gettext()); return true; //Texten i textrutan tilldelas etiketten /home/micko/skrivbord/java_lektioner.doc

20 Klassen Label har två konstruktorer för etiketten e: Label e=new Label( Text i etikett ); Label e=new Label( Text i etikett,label.right); Nedan visas några användbara metoder för etiketten e: e.settext( Text ); String texten=e.gettext(); e.setaligment(label.center); Egenskaper hos komponenter //Skriver ut texten vänsterjusterad i etikettens textyta //Skriver ut texten högerjusterad; Label.RIGHT, //Label.LEFT och Label.CENTER finns //Placerar texten Text i etiketten //Returnerar etiketttexten till variabeln texten //Centrerar texten Komponenternas färg, text, storlek och läge kan påverkas av bl a samma metoder som vi använt för hela fönstret: setbackground(c); setforegrund(c); setfont(f); setvisible(true/false); setsize(bredd, höjd); setlocation(x,y); //Påverkar bakgrundsfärg hos text och knapp //Påverkar textfärg //Anger textstil och storlek //Komponenten döljs med false //Anger komponentens bredd och höjd i pixlar. Görs efter initieringen i t ex paint //Placerar komponenten med övre vänstra hörnet i koordinaten (x,y) i t ex paint Nedan visas några exempel på färg- och textändringar för knapp, textruta och etikett: TextField t = new TextField("Skriv här!",10); Label e = new Label("Grön:",Label.RIGHT); Button b = new Button("Tryck"); Font f=new Font("Arial",Font.BOLD,24); Color c=new Color(200,200,0); e.setfont(f); //Etikettens text anges b.setvisible(false); //Knappen döljs e.setforeground(color.green); //Etikettens text blir grön e.setbackground(c); //Etikettens bakgrund får färgen c t.setbackground(color.blue); //Textrutans bakgrundsfärg blir blå e.setsize(50,15); //Etiketten får längden 50 och höjden 15 pixlar e.setlocation(10,100); //Lägger etiketten med övre vänstra hörnet i koordinaten (10,100) Övning 3.2: Skriv och kör en applet via ett HTML-dokument läser in och beräknar summan av två decimaltal, enligt urklippet intill. Ledning: Använd Double.parseDouble(text); för omvandling från text till double och String.valueOf(x) för omvandling från typen double till text. Övning 3.3: Modifiera föregående applet så att den istället beräknar hypotenusan till till två inmatade kateter. Övning 3.4: Skriv ett program där bakgrundsfärgen anges i tre textrutor på RGB-format (0-255). Följande skall gälla (se även urklipp): Textfärgen på etiketten och i textrutan skall vara röd, grön respektive blå. Etiketternas bakgrundsfärg skall vara samma som fönstrets bakgrundsfärg. Texten skall vara 24 p fet. /home/micko/skrivbord/java_lektioner.doc

21 Rullningslist (scrollbar) Rullningslisten skapas av klassen Scrollbar. I programmet nedan skrivs läget hos rullningslisten ut i en etikett: public class test4 extends Applet{ Label la; Scrollbar rull; public void init() { setbackground(color.yellow); rull=new Scrollbar(Scrollbar.HORIZONTAL,50,10,0,110); //Rullningslistens konstruktor add(rull); la=new Label("50",Label.RIGHT); add(la); public boolean handleevent(event evt){ //handleevent hanterar händelser från rullningslist if (evt.target instanceof Scrollbar) la.settext(string.valueof(rull.getvalue())); //Läget hos rullningslisten skrivs ut i label return true; Observera att metoden action inte fungerar för rullningslister. Istället används metoden handleevent. Klassen Scrollbar har följande konstruktor för rullningslisten r: Scrollbar r=new Scrollbar(Scrollbar.HORIZONTAL,position,knappbredd,min,max); Positionen avläses vid knappens vänstra sida (undre sida vid Scrollbar.VERTICAL). Om exempelvis min=0, max=100 och knappbredd=10 blir maximala positionen 90 när knappen ligger längst till höger. Nedan visas några användbara metoder för rullningslisten r: r.getvalue(); r.setvalue(n); r.getmaximum() r.getminimum() //Ger position hos rullningslistens knapp som heltal //Sätter rullningslistens knapp till positionen n (heltal, även negativt) //Ger maxvärdet //Ger minvärdet Övning 3.5: Skriv ett program med tre rullningslister, med vilka bakgrundsfärgen kan justeras (0-255). Vald färg skrivs ut i respektive etikett på RGB-form. Etikettfärgen skall dessutom vara röd, grön och blå, samt deras bakgrundsfärg samma som fönstrets bakgrundsfärg, enligt urklippet till höger. Övning 3.6: Skriv en applet som fyller en kvadrat med den övertonade gråskalan i urklippet till höger. /home/micko/skrivbord/java_lektioner.doc

22 4. Mus- och tangenthändelser I förra kapitlet hanterades händelser vid knapptryckningar och ändringar hos en rullningslist. I detta kapitel skall vi ta hand om händelser hos mus och tangenter. Mushändelser Följande metoder hanterar händelser hos musen: mousedown(event evt, int x, int y) mouseup(event evt, int x, int y) mousemove(event evt, int x, int y) mousedrag(event evt, int x, int y) mouseenter(event evt, int x, int y) mouseexit(event evt, int x, int y) //Ger markörens koordinat när en musknapp trycks ned //Ger markörens koordinat när en musknapp släpps upp //Ger markörens koordinat när musen rör sig //Samma som föregående, men när en musknapp är nedtryckt //Ger markörens koordinat när musen kommer in i fönstret //Ger markörens koordinat när musen lämnar fönstret Programmet nedan skriver ut markörens koordinat när musknappen trycks ned, släpps upp respektive när musen rör sig i tre olika etiketter: public class test4 extends Applet{ Label l1,l2,l3; public void init() { l1=new Label("MouseDown x=000 y=000",label.left); add(l1); l2=new Label("MouseUp x=000 y=000",label.left); add(l2); l3=new Label("MouseMove x=000 y=000",label.left); add(l3); public boolean mousedown(event evt, int x, int y){ l1.settext("mousedown x="+string.valueof(x)+" y="+string.valueof(y)); return true; public boolean mouseup(event evt, int x, int y){ l2.settext("mouseup x="+string.valueof(x)+" y="+string.valueof(y)); return true; public boolean mousemove(event evt, int x, int y){ l3.settext("mousemove x="+string.valueof(x)+" y="+string.valueof(y)); return true; /home/micko/skrivbord/java_lektioner.doc

23 Override på update Följande program skriver ut markörens koordinat med ritmetoden drawstring där musknappen trycks ned: public class test4 extends Applet{ int x1,y1; //Globala variabler public void paint(graphics g){ g.drawstring("x="+string.valueof(x1)+" y="+string.valueof(y1),x1,y1); public boolean mousedown(event evt, int x, int y){ x1=x; y1=y; repaint(); //Anropar metoden paint return true; Observera att den gamla koordinaten raderas vid varje ny musklickning. Detta beror på att metoden repaint även anropar metoden update, som målar över all grafik (dock inte komponenter som knappar och etiketter) med bakgrundsfärgen. Genom att göra en omdefiniering av update så att den anropar paint utan att rita om bakgrunden, kommer även de gamla koordinaterna att visas. Att omdefiniera en metod kallas override. Följande program visar hur det fungerar: public class test4 extends Applet{ int x1=50, y1=50; //Startkoordinater för paint, som anropas när fönstret skapas public void paint(graphics g){ g.drawstring("x="+string.valueof(x1)+" y="+string.valueof(y1),x1,y1); public void update(graphics g){ paint(g); //override på update public boolean mousedown(event evt, int x, int y){ x1=x; y1=y; repaint(); return true; Originalversionen av update har följande utseende: public void update(graphics g){ g.setcolor(getbackground()); g.fillrect(0,0,width,height); g.setcolor(getforeground()); paint(g); /home/micko/skrivbord/java_lektioner.doc

24 Övning 4.1: Skriv ett program som ritar ut en röd cirkel med diametern 20 punkter när musknappen klickas, enligt urklippet. Övning 4.2: Skriv ett program som ritar en linje mellan två punkter som klickar med musen. Övning 4.3: Skriv ett program som ritar en gul rektangel med röd ram med diagonalen mellan de två klickade punkterna. Observera att rekrangeln omges av en röd linje, samt att det inte spelar någon roll hur punkterna klickas, d v s om nedre eller övre punkten klickas först. Ledning: Använd funktionerna Math.min() och Math.abs(). Övning 4.4: Modifiera föregående övning så att rektangeln ritas ut i realtid med musknappen nedtryckt. Det skall även fungera att minska rektangelns storlek. När musknappen släpps och en ny rektangelpåbörjas raderas den gamla. Ledning: Gör inte override på update. Övning 4.5: Skriv ett program där man kan rita med musen när en knapp är nedtryckt. /home/micko/skrivbord/java_lektioner.doc

25 Rita utan paint Metoden paint anropas automatiskt när appleten startas. Ibland ställer detta till problem, t ex när variabler i paint ännu inte är initierade. Därför är det bättre att lägga kod som ritar figurer i en egendefinierad metod, som anropas från t ex en musmetod. Detta illustreras i följande exempel, där en kvadrat ritas ut vid varje musklickning. Programmet innehåller även en knapp som raderar fönstret: public class test4 extends Applet{ Button knapp; //Raderaknappen Graphics g; //Deklarera objektet g av klassen Graphics public void init() { g=getgraphics(); //Skapar objektet g. Observera get istället för new setbackground(color.yellow); knapp=new Button("Radera"); add(knapp); public boolean action(event evt,object arg){ repaint(); return true; public void rita(int x1, int y1){ g.setcolor(color.red); g.fillrect(x1-10,y1-10,20,20); //Reagerar på knappen //Ritar om fönstret, d v s raderar //Egen metod rita som ritar //Fyller en rektangel med markör i mitten public boolean mousedown(event evt, int x, int y){ rita(x,y); //Anropar egna funktionen rita. Skickar med x och y. return true; Observera att programmet innehåller den egendefinerade metoden rita, som ritar ut en kvadrat. Övning 4.6: Skriv ett program där man kan rita polygoner genom att klicka i hörnen med musen. Polygonen ritas när det sista hörnet klickas. Antal hörn matas in i textrutan. Det skall även finnas en knapp som raderar fönstret. Tangenthändelser Händelserna keydown(event evt, int key) och KeyUp(Event evt, int key) hanterar tangenttryckningar. Parametern key anger ASCII-koden för den nedtryckta tangenten och evt används för att kolla om Alt-, Ctrl- eller Skift-tangenten är nedtryckt: if (evt.controldown()) if (evt.shiftdown()) if (evt.metadown()) //true om Ctrl-tangen är nedtryckt //true om Skift-tangen är nedtryckt //true om Alt-tangen är nedtryckt /home/micko/skrivbord/java_lektioner.doc

26 Följande exempel skriver ut ASCII-koden och tecknet för den nedtryckta tangenten: public class test3 extends Applet{ String s=""; public void paint(graphics g){ g.drawstring(s,50,50); public boolean keydown(event evt, int key){ s="ascii-kod: "+String.valueOf(key)+" Tecken: "+(char)key; repaint(); return true; Observera att man måste klicka på appleten med musen en gång innan tangenthändelserna aktiveras. Det går heller inte att använda tangenthändelserna för att skriva ut text i komponenterna textrura och etikett. För vissa tangenter som saknar ASCII-kod, t ex piltangenterna, finns specialtecken: Event.HOME Event.END Event.PGUP Event.PGDN Event.UP Event.DOWN Event.LEFT Event.RIGHT //Home-tangenten //End-tangenten //Page Up-tangenten //Page Down-tangenten //Pil upp-tangenten //Pil ned-tangenten //Pil vänster-tangenten //Pil höger-tangenten Specialtecknen används på följande sätt: if(key==event.left) Övning 4.7: //Kollar om tangenten för pil vänster är nedtryckt Gör en applet där du kan flytta runt en kvadrat på skärmen med piltangenterna. Övning 4.8: Gör en applet där du kan rita en figur med pitangenterna med en liten punkt som penna. Trycker man på f -tangenten kan flytta punkten på skärmen utan att det ritas ett streck. Trycker man på r -tangenten ritar punkten ett streck efter sig när den flyttas. /home/micko/skrivbord/java_lektioner.doc

27 5. Animering med trådar Innan vi börjar animera skall vi presentera sex huvudmetoder som finns i klassen Applet (utom run). Två av dem, init och paint, har vi använt tidigare: init() start() run() stop() Detta är den första metoden som körs när appleten laddas i webbläsaren. Här görs initieringar av t ex komponenter, globala variabler och av bakgrundsfärg. Efter att init anropats körs metoden start. Den används för att starta någon aktivitet, t ex en animering (se nedan). Metoden anropas efter att en aktivitet startats i metoden start, t ex att en tråd har startats (finns i gränssnittet Runnable, se nedan). kan användas för att stoppa en aktivitet. Metoden anropas automatisk när användaren lämnar webbsidan. Metoden används sällan i program. paint(graphics g) Här placeras grafikrutinera för att rita på appleten. Metoden anropas automatiskt när appleten startas och när fönstrets storlek eller läge förändras. I tidigare exempel (s. 25) har vi visat hur man kan rita utan paint genom att deklarera en egen metod. destroy() Denna metod anropas automatiskt när appleten avslutas och webbfönstret stängs och frigör då allt allokerat minne. Metoden används sällan i program. Trådar och multitasking När ett program befinner sig i en loop är det normalt helt uppslukat av vad som händer i loopen och kan inte påverkas utifrån. Exempelvis går det inte att avbryta en loop via en knapptryckning. Med trådar (threads) kan man emellertid använda sig av s k multitasking, d v s programmet får då förmågan att reagera på yttre händelser trots att det är upptaget av en loop. För att detta skall fungera Java måste vi införa gränssnittet Runnable, som innehåller metoder för trådar. Först något om multipelt arv i Java. Multipelt arv och gränssnitt i Java I C++ använde vi ibland multipelt arv. Detta innebär att en klass kan ärva från flera klasser. I Java däremot kan en klass ärva från endast en klass (via extends). Java har dock begreppet gränssnitt, som är en samling av metoder som kan ärvas via kommandot implements. Klassen Thread och gränssnittet Runnable Klassen Thread har några metoder för att starta och stänga av trådar: Thread trad; trad.start(); trad.stop(); trad.suspend(); trad.resume(); Startar en tråd Stoppar en tråd Deaktiverar en tråd, d v s pausar tråden Återstartar en deaktiverad tråd Observera att dessa start och stop inte är samma som tillhör klassen Applet. I följande exempel ärver klassen test4 egenskaperna från klassen Applet, samt implementerar gränssnittet Runnable, som innehåller metoden run. Programmet flyttar en cirkel över skärmen så länge x<300 pixlar: /home/micko/skrivbord/java_lektioner.doc

Applets med komponenter

Applets med komponenter 5 Applets med komponenter Knappar Om gränssnitt (interface) Händelser Måla om appletytan Etiketter och textrutor Förvandla strängar till tal Aritmetik Omvandla datatyper med cast Felhantering Kap 5: Sid

Läs mer

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

Objektorienterad programmering i Java. Föreläsning 5 Kort om Java-Applets Objektorienterad programmering i Java Föreläsning 5 Kort om Java-Applets 1 Läsanvisningar Den här föreläsningen syftar till att ge en bild av vad en Java-Applet är och är ganska fristående från föregående

Läs mer

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 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. 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:

Läs mer

Att skriva till och läsa från terminalfönstret

Att skriva till och läsa från terminalfönstret Att skriva till och läsa från terminalfönstret Oftast används grafiska komponenter i Java för att kommunicera med användaren (användargränssnitt), men det finns objekt i standardbiblioteken för de tillfällen

Läs mer

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

Kort om klasser och objekt En introduktion till GUI-programmering i Java Kort om klasser och objekt En introduktion till GUI-programmering i Java Klasser En klass är en mall för hur man ska beskriva på något. Antag att vi har en klass, Bil. Den klassen innehåller en lista på

Läs mer

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

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin TENTAMEN I IKB007 INTERNETPROGRAMMERING MED JAVA för SY2 1999-03-17, kl 14.00-18.00 Hjälpmedel: En lärobok i Java programmering Återlämningstillfälle:

Läs mer

Lite logik. Kap 6: Sid 2

Lite logik. Kap 6: Sid 2 6 Loopar och val Lite logik Val mellan två alternativ Val mellan flera alternativ Sammansatta villkor Boolska variabler Jämför strängar While-loopar Do-loopar For-loopar Kortformer Kap 6: Sid 2 Lite logik

Läs mer

FactoryCast HMI. Premium & Quantum PLC. Applets 2004-10-28

FactoryCast HMI. Premium & Quantum PLC. Applets 2004-10-28 FactoryCast HMI Premium & Quantum PLC Applets 2004-10-28 INNEHÅLLSFÖRTECKNING 1 OM DETTA DOKUMENT...3 2 FÖRUTSÄTTNINGAR...3 3 PROJEKT I J++...4 3.1 LÄSA PLC-VARIABLER...4 3.1.1 Gränssnittet...4 3.1.2 Upprätta

Läs mer

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

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p UMEÅ UNIVERSITET Datavetenskap 010530 LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p Betygsgränser 3 21,5-27 4 27,5-33,5 5 34-43 Uppgift 1. (4p) Hitta de fel som finns i nedanstående klass (det

Läs mer

Att använda Java SE JDK 6

Att använda Java SE JDK 6 Att använda Java SE JDK 6 Programmeringsspråket Java är utvecklat av det amerikanska företaget Sun Microsystems. Sun erbjuder gratis en utvecklingsmiljö för java-programmering, Java 2 SE (Standard Edition).

Läs mer

(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

(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 (Man brukar säga att) Java är... Denna föreläsning Allmänt om Java Javas datatyper, arrayer, referenssemantik Klasser Strängar enkelt baserat på C/C++ objekt-orienterat från början dynamiskt utbyggbart

Läs mer

Lektion Java Grunder. Javas historia. Programmeringsspråket Java. Skillnaderna mellan Java och C++ JVM (Javas Virtuella Maskin)

Lektion Java Grunder. Javas historia. Programmeringsspråket Java. Skillnaderna mellan Java och C++ JVM (Javas Virtuella Maskin) Lektion Java Grunder Javas historia Ursprungligen utvecklades Java (1991) för att användas i olika typer av konsumentelektronik (mikrovågsugnar, videoapparater) av programmerare på Sun. Språket kallades

Läs mer

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Skriven av Michael Andersson Introduktion Programmering I högnivåspråk fokuserar på själv problemet (algoritmen) istället

Läs mer

Java-kursen. Javaprogram blir därför långsammare än andra program och man kan inte skapa körbara exe-filer.

Java-kursen. Javaprogram blir därför långsammare än andra program och man kan inte skapa körbara exe-filer. -kursen Inledning Java är ett plattformsoberoende programmeringsspråk. Du kan alltså köra samma program på datorer med olika operativsystem. Andra språk kompilerar källkoden direkt till maskinkod som bara

Läs mer

Eclipse. Avsikt. Nu ska ett fönster liknande figuren till höger synas.

Eclipse. Avsikt. Nu ska ett fönster liknande figuren till höger synas. Eclipse Avsikt Att bekanta dig med Eclipse programmeringsmiljö, dvs att med hjälp av Eclipse 1. skapa ett nytt projekt 2. skriva in källkod (sparas som.java-fil) 3. kompilera (översätta) koden till byte-kod

Läs mer

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

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 Datalogi I, grundkurs med Java 10p, 2D4112, 2002-2003 Exempel på tentafrågor i Java Först följer frågor av flervalstyp. Frågorna är inte ordnade efter svårighetsgrad. 1. Skillnaden mellan typerna int och

Läs mer

2D1339 Programkonstruktion för F1, ht 2004

2D1339 Programkonstruktion för F1, ht 2004 2D1339 Programkonstruktion för F1, ht 2004 Kontrollskrivning 1 Onsdag 24/11 2004 kl 11.15 12.00 Endast ett svar är rätt på varje fråga! Om mer än ett svar givits blir det noll poäng på frågan. Alla skriftliga

Läs mer

Att använda Java SE JDK 6

Att använda Java SE JDK 6 Att använda Java SE JDK 6 Programmeringsspråket Java är utvecklat av det amerikanska företaget Sun Microsystems. Sun erbjuder gratis en utvecklingsmiljö för java-programmering, Java 2 SE (Standard Edition).

Läs mer

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk

Läs mer

NetBeans 7. Avsikt. Projektfönster

NetBeans 7. Avsikt. Projektfönster NetBeans 7 Avsikt Att bekanta dig med NetBeans programmeringsmiljö, dvs att med hjälp av NetBeans 1. skapa ett nytt projekt 2. skriva in källkod (sparas som.java-fil) 3. kompilera (översätta) koden till

Läs mer

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

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här: Att skapa en klass kvadrat Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här: public class Kvadrat { private int sida; Det var väl inte

Läs mer

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

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering. EDAA20 Programmering och databaser Mål komprimerat se kursplanen för detaljer Läsperiod 1 7.5 hp anna.aelsson@cs.lth.se http://cs.lth.se/edaa20 Mer information finns på kursens webbsida samt på det utdelade

Läs mer

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

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016 Objektorienterad Programkonstruktion Föreläsning 3 7 nov 2016 Klass/instans Med hjälp av nyckelordet static kan vi bestämma att en metod eller ett fält ska tillhöra själva klassen i stället för en specifik

Läs mer

ID1004 Laboration 3, 5-6 November 2012

ID1004 Laboration 3, 5-6 November 2012 18-okt-2012/FK ID1004 Laboration 3, 5-6 November 2012 Labben bör göras individuellt. Beräknad tid ca 2 timmar. Instruktionen antar att labben utförs i datasal, med hjälp av den integrerade utvecklingsmiljön

Läs mer

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P UME UNIVERSITET Datavetenskap 981212 TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P Datum : 981212 Tid : 9-15 HjŠlpmedel : Inga Antal uppgifter : 9 TotalpoŠng : 60 (halva pošngtalet kršvs normalt fšr

Läs mer

Laboration 1 Introduktion till Visual Basic 6.0

Laboration 1 Introduktion till Visual Basic 6.0 Laboration 1 Introduktion till Visual Basic 6.0 Förberedelse Förbered dig genom att läsa föreläsningsanteckningar och de kapitel som gåtts igenom på föreläsningarna. Läs även igenom laborationen i förväg.

Läs mer

Nedan skapar vi klassen Person innehållande datamedlemmar för förnamn, efternamn, ålder, längd och vikt:

Nedan skapar vi klassen Person innehållande datamedlemmar för förnamn, efternamn, ålder, längd och vikt: 8. Objektorientering Skälet till att C++ är ett av de mest använda programspråken är att det är objektorienterat. Detta bygger vidare på begreppet struct (ursprungligen från språket C som inte är objektorienterat),

Läs mer

Kompilera och exekvera Javakod

Kompilera och exekvera Javakod Kompilera och exekvera Javakod Förberedelser För att kunna göra dessa övningar måste du ha installerat Java Development Kit, JDK, som bland annat innehåller Java kompilatorn, javac. Hur du installerar

Läs mer

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel Programmeringsteknik för Bio1 och I1 Övning 2 Kort repetition Övningsgrupp 3 (Sal E33) 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/2d1310/

Läs mer

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

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34 Tentamen Datalogi I, grundkurs med Java 10p, 2D4112, 2002-2003 Lördagen den 30 november 2002 kl 9.00 14.00, salar E33, E34 Inga hjälpmedel 30 poäng ger säkert godkänt, 40 poäng ger betyg 4 50 poäng ger

Läs mer

NetBeans 5.5. Avsikt. Projektfönster

NetBeans 5.5. Avsikt. Projektfönster NetBeans 5.5 Avsikt Att bekanta dig med NetBeans programmeringsmiljö, dvs att med hjälp av NetBeans 1. skapa ett nytt projekt 2. skriva in källkod (sparas som.java-fil) 3. kompilera (översätta) koden till

Läs mer

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser // En första version av BankKonto-klassen class BankKonto { private String namn; private long nr; private double saldo; private double ränta; // Klassen TestaBankKonto // Klassens uppgift är att skapa

Läs mer

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

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... } En klassdefinition class A extends B {... Arv definierar en klass A som ärver av B. Klassen A ärver alla fält och metoder som är definierade för B. A är en subklass till B. B är en superklass till A. class

Läs mer

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

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc Föreläsning 5 (6) Metoder Metoder Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc Metoder Deklarera public void setnamn(string n) Åtkomstmodifierare Returtyp

Läs mer

Grafiska komponenter.

Grafiska komponenter. Grafiska komponenter. Kap J5-1 Grafiska användargränssnitt är det moderna alternativet till traditionell terminal-i/o. GUI-programmering bygger på en händelsestyrd flödeskontroll. I Java utförs GUI-programmeringen

Läs mer

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic Inledning Starta Microsoft Visual Studio 2005. Välj create Project Välj VB + Vindows Application och välj ett nytt

Läs mer

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

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng TENTAMEN I PROGRAMMERING Ansvarig: Jan Skansholm, tel 7721012 Betygsgränser: Hjälpmedel: Sammanlagt maximalt 60 poäng. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng Skansholm,

Läs mer

Typkonvertering. Java versus C

Typkonvertering. Java versus C Typer Objektorienterad programmering E Typkonvertering Typkonvertering Satser: while, for, if Objekt Föreläsning 2 Implicit konvertering Antag att vi i ett program deklarerat int n=3; double x = 5.2; Då

Läs mer

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2 AID-nummer: Datum: 2014-12-18 Kurskod: 725G61 Provkod: LAB1 Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2 Skrivningstid: 2014-12-18 klockan 8.00-10.00. Hjälpmedel: Inga. För varje fråga

Läs mer

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

Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser? 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

Läs mer

2D1342 Programkonstruktion för F1, ht 2006

2D1342 Programkonstruktion för F1, ht 2006 2D1342 Programkonstruktion för F1, ht 2006 Lappskrivning 1 Tisdag 7/11 2006 kl 11.15 12.00 Endast ett svar är rätt på varje fråga! Om mer än ett svar givits blir det noll poäng på frågan. Alla skriftliga

Läs mer

JAVAUTVECKLING LEKTION 7

JAVAUTVECKLING LEKTION 7 JAVAUTVECKLING LEKTION 7 2016 Mahmud Al Hakim mahmud.al.hakim@nackademin.se www.alhakim.se AGENDA Olika språkversioner (Klassen Locale) Utskrift i kommandofönster Inläsning via kommandofönster Standardklassen

Läs mer

Objektorienterad programmering i Java

Objektorienterad programmering i Java Objektorienterad programmering i Java Föreläsning 4 Täcker i stort sett kapitel 6 i kursboken Java Software Solutions 1 Läsanvisningar Den här föreläsningen är uppbyggd som en fortsättning av exemplet

Läs mer

Editering, Kompilering och Exekvering av Javaprogram

Editering, Kompilering och Exekvering av Javaprogram UMEÅ UNIVERSITET Institutionen för informatik B.1, Programmeringens grunder, 5 poäng Editering, Kompilering och Exekvering av Javaprogram Introduktion Syftet med kursmomentet Programmeringens grunder (B.1)

Läs mer

SMD 134 Objektorienterad programmering

SMD 134 Objektorienterad programmering SMD 134 Objektorienterad programmering Dagens agenda: Typer i Java: primitiva datatyperna, referenstyper Variabler och variabeltilldelningar med primitiva typer Konstanter av de olika typerna. Heltalsräkning

Läs mer

l uppgiftsformulering l algoritmkonstruktion l verifikation l kodning l testning och avlusning l validering l dokumentering l underhœll Kapitel 2

l uppgiftsformulering l algoritmkonstruktion l verifikation l kodning l testning och avlusning l validering l dokumentering l underhœll Kapitel 2 Strukturerad programmering l uppgiftsformulering l algoritmkonstruktion l verifikation l kodning l testning och avlusning l validering l dokumentering l underhœll 1 2 Olika ansatser Begrepp Den manipulativa/imperativa

Läs mer

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77) Objektorienterad Programmering (TDDC77) Föreläsning VI: eclipse, felsökning, felhantering Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Outline Felhantering Eclipse Felsökning Command line argumenter

Läs mer

Övning 1. Datateknik A, Java I, 5 poäng. Att ladda hem och installera Java Att skriva ditt första Javaprogram Att kompilera och exekvera ditt program

Övning 1. Datateknik A, Java I, 5 poäng. Att ladda hem och installera Java Att skriva ditt första Javaprogram Att kompilera och exekvera ditt program Datateknik A, Syfte: Att ladda hem och installera Java Att skriva ditt första Javaprogram Att kompilera och exekvera ditt program Att läsa: Lektion 1 Antal uppgifter: 3 Inlämning: Sker via inlämningsuppgifter

Läs mer

Frames, menyer och GUI-program

Frames, menyer och GUI-program 15 Frames, menyer och GUI-program Frames En frame-klass Om konstruktorer - igen Funktionella fönster Menyer Popupmenyer GUI-applikationer Dialogrutor Printerutskrift Kap 15: Sid 2 Frames Redan i kapitel

Läs mer

Tentamen OOP 2015-03-14

Tentamen OOP 2015-03-14 Tentamen OOP 2015-03-14 Anvisningar Fråga 1 och 2 besvaras på det särskilt utdelade formuläret. Du får gärna skriva på bägge sidorna av svarsbladen, men påbörja varje uppgift på ett nytt blad. Vid inlämning

Läs mer

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan. Bankkonto - övning Övningar att göra efter lärardemostration. Filen bankkonto.zip innehåller ett projekt med klassen Bankkonto. Zippa upp denna fil och öppna projektet i BlueJ och skriv vidare på klassen

Läs mer

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

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 2001 - maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 2001 - maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h Antalet uppgifter : 2 (20p + 20p = 40 p) ) Lärare, jourhavande lärare :

Läs mer

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

Malmö högskola 2007/2008 Teknik och samhälle Laboration 12 Avsikten med denna laboration är att du ska göra några grafiska program. Börja med att skapa paketet laboration 12. Grundläggande uppgift Uppgift 12a Uppgiften går ut på att göra en enkel

Läs mer

Laboration 1. "kompilera"-ikonen "exekvera"-ikonen

Laboration 1. kompilera-ikonen exekvera-ikonen Programmerade system I1 Syfte Laboration 1. Syftet med denna laboration är dels att göra dej bekant med de verktyg som kan vara aktuella i programmeringsarbetet, dels ge en första inblick i att skriva

Läs mer

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

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C. Idag Javas datatyper, arrayer, referenssemantik Klasser Arv, polymorfi, typregler, typkonvertering Strängar Tänker inte säga nåt om det som är likadant som i C. Objectorienterad programmering Sida 1 Ett

Läs mer

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet ITK:P1 Föreläsning 1 Att programmera i språket Java DSV Peter Mozelius Programmering Olika typer av programmering som t ex: o Imperativ programmering (C, Pascal m fl) o Funktionell programmering (Lisp,

Läs mer

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

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt Föreläsning 4 Klasser Och Objekt Klass Beskrivning av en objekttyp Beskriver egenskaper och beteende (fält och metoder) Klassen fungerar som en ritning Objekt skapas från klassbeskrivningen - instansieras

Läs mer

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77) Objektorienterad Programmering (TDDC77) Föreläsning II: utmatning, variabler, typer Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Kompilera och köra programmet under terminal 2: I Skapa Hej.java

Läs mer

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna. 1 Uppgift 1 Klassen Company Banken FinanceTrust som tidigare bara haft privatpersoner som kunder vill nu bygga ut sitt datasystem så att även företag kan registreras som kunder. Skriv klassen Company som

Läs mer

OOP Objekt-orienterad programmering

OOP Objekt-orienterad programmering OOP F4:1 OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder Metoder - subrutiner OOP F4:2 Kod som utför en viss operation. Ligger i olika klasser och anropas via operatorn.

Läs mer

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET UMEÅ UNIVERSITET Datavetenskap 010824 TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET Datum : 010824 Tid : 9-15 Hjälpmedel : Inga Antal uppgifter : 7 Totalpoäng : 40 (halva poängtalet krävs normalt

Läs mer

Användarhandledning Version 1.2

Användarhandledning Version 1.2 Användarhandledning Version 1.2 Innehåll Bakgrund... 2 Börja programmera i Xtat... 3 Allmänna tips... 3 Grunderna... 3 Kommentarer i språket... 4 Variabler... 4 Matematik... 5 Arrayer... 5 på skärmen...

Läs mer

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program Kompilera och köra programmet Objektorienterad Programmering (TDDC77) Föreläsning II: utmatning, variabler, typer Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 under terminal 2: I Skapa Hej.java

Läs mer

3.5 Visuell programmering

3.5 Visuell programmering 3.5 Visuell programmering Alla våra program hittills har varit C# Console Applications (sid 41) inkl. programmet MessageBox fast det genererade en grafisk meddelanderuta. Nu vill vi utnyttja grafikens

Läs mer

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1) Föreläsning 10 STRING OCH STRINGBUILDER; VARIABLERS SYNLIGHET Att deklarera och att använda variabler När vi deklarerar en variabel, t ex int x; inför vi en ny variabel med ett namn och en typ. När namnet

Läs mer

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling metoder Föreläsning 2 Objektorienterad programmering DD1332 Array [modifierare] String metodnamn (String parameter) Returtyp (utdata typ) i detta fall String Indata typ i detta fall String 1 De får man

Läs mer

Objektorienterad programmering i Java

Objektorienterad programmering i Java bild 1 Objektorienterad programmering i Java Föreläsning 1 Kapitel 1-3 i kursboken Java Software Solutions bild 2 Läsanvisningar Kapitel 1 är en repetition av det ni förväntas kunna sedan tidigare. Det

Läs mer

F4. programmeringsteknik och Matlab

F4. programmeringsteknik och Matlab Programmeringsspråk Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer 1 Ett program är en eller flera instruktioner

Läs mer

Rita Egna Bilder, Timer

Rita Egna Bilder, Timer Rita Egna Bilder, Timer Josef Svenningsson November 27, 2012 Grafik Varje gång ett fönster behöver ritas om, pga av att det flyttas eller varit övertäckt, anropas automatiskt en metod som har namnet paintcomponent.

Läs mer

Javaprogrammering - Del 1. Kursupplägg. Hello world. Kompilera. Kör. Environmentvariabler. föreläsningar övningar 1, 2, 3 och 4 INLÄMNINGSUPPGIFT 2

Javaprogrammering - Del 1. Kursupplägg. Hello world. Kompilera. Kör. Environmentvariabler. föreläsningar övningar 1, 2, 3 och 4 INLÄMNINGSUPPGIFT 2 Javaprogrammering - Del 1 Java allmänt Objektorientering - polymorfism Kursupplägg föreläsningar övningar 1, 2, 3 och 4 INLÄMNINGSUPPGIFT 2 tentamen 1 2 Hello world Kompilera 3 4 Kör Environmentvariabler

Läs mer

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

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten? Programmeringsteknik och Matlab Övning 4 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

Läs mer

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

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga) Grundläggande programmering med C# Provmoment: Ladokkod: Tentamen ges för: 7,5 högskolepoäng TEN1 NGC011 Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga) (Ifylles av student) (Ifylles av student)

Läs mer

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList. Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 3 Innehåll Lite om felhantering och Exceptions Mer om variabler och parametrar

Läs mer

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

DI-institutionen Sid 1 av 5 Hans-Edy Mårtensson Sten Sundin Micael Karlsson DI-institutionen Sid 1 av 5 Hans-Edy Mårtensson Sten Sundin Micael Karlsson Lösningar till TENTAMEN I IXC003 SYSTEMUTVECKLING MED INTERNET/INTRANET, del 1 (5p) för IT3 och INTERNETPROGRAMMERING MED JAVA

Läs mer

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

Högskolan Dalarna sid 1 av 5 DI-institutionen Hans-Edy Mårtensson Sten Sundin Högskolan Dalarna sid 1 av 5 DI-institutionen Hans-Edy Mårtensson Sten Sundin TENTAMEN I IKB007 INTERNETPROGRAMMERING MED JAVA, 5p för SY2 2001-04-28, kl 09.00-13.00 Hjälpmedel: Endast bifogat kompendium

Läs mer

Objektorienterad programmering Föreläsning 2

Objektorienterad programmering Föreläsning 2 Objektorienterad programmering Föreläsning 2 Copyright Mahmud Al Hakim mahmud@webacademy.se www.webacademy.se Agenda Inläsning av data via dialogrutor Repetitioner (While-satsen och For-satsen) Nästlade

Läs mer

Inledande programmering med C# (1DV402) Ditt första C#-program med Visual Studio

Inledande programmering med C# (1DV402) Ditt första C#-program med Visual Studio Ditt första C#-program med Visual Studio Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande programmering med C# vid Linnéuniversitetet. Du får använda detta verk så

Läs mer

DAT043 - Föreläsning 7

DAT043 - Föreläsning 7 DAT043 - Föreläsning 7 Model-View-Controller, mer om klasser och interface (arv, ) 2017-02-06 Designmönstret Observer avläser Observer Observable meddelar Observer avläser En eller flera objekt registrerar

Läs mer

Innehållsförteckning

Innehållsförteckning Innehållsförteckning Ämne Sida Program Hur ska man lära sig programmering med Java? 11 Kapitel 1 Introduktion till programmering 13 1.1 Vad är programmering? 14 1.2 Vad är en algoritm? 16 1.3 Olika sätt

Läs mer

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

Programmering A C# VT 2010. Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson 2010 02 08 Programmering A C# VT 2010 Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson 2010 02 08 Innehåll Hjälp och referenser... 3 Kap 1 Introduktion... 3 Steg för steg... 3 Kapitel 2 Variabler...

Läs mer

Javas klassbibliotek. Kap 7: Sid 2

Javas klassbibliotek. Kap 7: Sid 2 7 Mest om metoder Javas klassbibliotek Allmänt om metoder Metoderna i klassen Math Trigonometriska övningar Experiment med slumptal Förvandla sträng till decimaltal Antal decimaler i utskrift Metoder i

Läs mer

Outline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler

Outline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler Outline Objektorienterad Programmering (TDDC77) Föreläsning V: arrayer, metoder, räckvidd (scope), eclipse Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Vända om inlästa värden Vända om inlästa

Läs mer

Programmering för språkteknologer I, VT2012. Rum

Programmering för språkteknologer I, VT2012. Rum Programmering för språkteknologer I, VT2012 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.lingfil.uu.se/~evelina/uv/uv12/pst1/ Idag - Kursplan - Börja programmera - Lokala variabler - aritmetiska

Läs mer

DD1342 Programkonstruktion för F1, ht 2007

DD1342 Programkonstruktion för F1, ht 2007 DD1342 Programkonstruktion för F1, ht 2007 Lappskrivning 1 Torsdag 22/11 2007 kl 9.15 10.00 Endast ett svar är rätt på varje fråga! Om mer än ett svar markerats räknas det som fel svar. Alla skriftliga

Läs mer

System.out.println("Jaså du har "+ antaldollar + " stycken.");

System.out.println(Jaså du har + antaldollar +  stycken.); 1 Vad vi vet Vi har tidigare sett exemplet med inmatning från tangentbordet. Exemplet innehåller flera aspekter av klasser och objekt. import java.util.*; class KeyboardReading { public static void main(string

Läs mer

Exempel på användning av arv: Geometriska figurer

Exempel på användning av arv: Geometriska figurer (9 maj 2014 Klasshierarkier 1 ) Exempel på användning av arv: Geometriska figurer Uppgift: Skriv ett program som kan hantera några olika geometrisk figurer: linjer, cirklar och rektanglar. (9 maj 2014

Läs mer

Objektorienterad programmering D2

Objektorienterad programmering D2 Objektorienterad programmering D2 Laboration nr 2. Syfte Att få förståelse för de grundläggande objektorienterade begreppen. Redovisning Källkoden för uppgifterna skall skickas in via Fire. För senaste

Läs mer

6. Nu skall vi ställa in vad som skall hända när man klickar på knappen samt att markören skall ändra sig till en hand när markören är på knappen.

6. Nu skall vi ställa in vad som skall hända när man klickar på knappen samt att markören skall ändra sig till en hand när markören är på knappen. Fiskar Arbetsbeskrivning knappmeny (Mediator 8) I detta exempel kommer du att lära dig Att göra en mastersida med knappar Att använda en mastersida på andra sidor Att använd funktionen Alignment Arbetsgång

Läs mer

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass EDAA20 Föreläsning 11-12 Klassen ArrayList Klassen ArrayList Skriva program som läser data från en textfil och skriver data till en textfil Repetition inför delmålskontroll 2 är en standardklass (i paketet

Läs mer

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

public interface Skrivbar { void skriv(); } public class Punkt implements Skrivbar { public double x; public double y; public interface Skrivbar { void skriv(); public class Punkt implements Skrivbar { public double x; public double y; public Punkt(double xx, double yy) { x = xx; y = yy; public Punkt() { @Override public

Läs mer

OOP Objekt-orienterad programmering

OOP Objekt-orienterad programmering OOP Objekt-orienterad programmering OOP F1:1 Delkursansvarig Epost Kursens webbsidor sm@fc.dsv.su.se http://people.dsv.su.se/~sm/oop/ Föreläsning 1 Introduktion till kursen OOP Vad är Java? Ett första

Läs mer

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

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition. Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Vem är vem på kursen Objektorienterad programvaruutveckling GU (DIT011) Kursansvarig : Katarina Blom, tel 772 10 60 Rum: 6126 (E-huset)

Läs mer

Tentamen i Grundläggande Programvaruutveckling, TDA548

Tentamen i Grundläggande Programvaruutveckling, TDA548 Tentamen i Grundläggande Programvaruutveckling, Joachim von Hacht/Magnus Myreen Datum: 2016-12-20 Tid: 08.30-12.30 Hjälpmedel: Engelskt-Valfritt språk lexikon Betygsgränser: U: -23 3: 24-37 4: 38-47 5

Läs mer

Programmering A. Johan Eliasson johane@cs.umu.se

Programmering A. Johan Eliasson johane@cs.umu.se Programmering A Johan Eliasson johane@cs.umu.se 1 Jag Undervisar mest grundläggande programmering på Institutionen för datavetensakap Applikationsutveckling för iphone Applikationsutveckling i Java Datastrukturer

Läs mer

TUTORIAL: KLASSER & OBJEKT

TUTORIAL: KLASSER & OBJEKT TUTORIAL: KLASSER & OBJEKT I denna tutorial lär vi oss att använda klasser och objekt samt hur vi bygger en enkel applikation kring dessa. I tutorialen kommer det finnas en mängd kod som du antingen kan

Läs mer

Föreläsning 1. Presentation av kursen Vad är programmering? Lite om java och utvecklingsmiljöer Aktivitetsdiagram Ett första program

Föreläsning 1. Presentation av kursen Vad är programmering? Lite om java och utvecklingsmiljöer Aktivitetsdiagram Ett första program Föreläsning 1 Presentation av kursen Vad är programmering? Lite om java och utvecklingsmiljöer Aktivitetsdiagram Ett första program Deitel: 1.1-1.9, 2.1-2.3 DA101A Programmering Programmering, DA101A Kursansvarig:

Läs mer

Lösningsförslag, tentamen FYTA11 Javaprogrammering

Lösningsförslag, tentamen FYTA11 Javaprogrammering Lunds universitet FYTA11 Institutionen för Astronomi och Teoretisk fysik HT 12 Lösningsförslag, tentamen FYTA11 Javaprogrammering Onsdag 9 januari 2013, 10:15 14:15 Instruktioner Hjälpmedel: Papper och

Läs mer

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek De åtta primitiva typerna Java, datatyper, kontrollstrukturer Skansholm: Kapitel 2) Uppsala Universitet 11 mars 2005 Typ Innehåll Defaultvärde Storlek boolean true, false false 1 bit char Tecken \u000

Läs mer

Laboration 1. "kompilera"-ikonen "exekvera"-ikonen

Laboration 1. kompilera-ikonen exekvera-ikonen Syfte Laboration 1. Objektorienterad programmering, Z1 Syftet med denna laboration är dels att göra dej bekant med de verktyg som kan vara aktuella i programmeringsarbetet, dels ge en första inblick i

Läs mer

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

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning 2I1049 Föreläsning 5 Objektorienterad programmering i Java KTH-MI Peter Mozelius Objektorientering Världar uppbyggda av objekt Inte helt olikt vår egen värld Ett sätt att modularisera våra system Objekten

Läs mer