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



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

Lite logik. Kap 6: Sid 2

F4. programmeringsteknik och Matlab

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

Applets med komponenter

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.

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

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

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

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

NetBeans 7. Avsikt. Projektfönster

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

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

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

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

PROGRAMMERING I SPRÅKET JAVA

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

FactoryCast HMI. Premium & Quantum PLC. Applets

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

Objektorienterad Programmering (TDDC77)

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

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

TDDC77 Objektorienterad Programmering

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

2D1339 Programkonstruktion för F1, ht 2003

Föreläsning 3-4 Innehåll

2D1339 Programkonstruktion för F1, ht 2004

Tentamen OOP

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

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

Programmering A. Johan Eliasson

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

TDIU01 - Programmering i C++, grundkurs

JAVAUTVECKLING LEKTION 3

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

Lab5 för prgmedcl04 Grafik

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

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

Rita Egna Bilder, Timer

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

(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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

OOP Objekt-orienterad programmering

Klassdeklaration. Metoddeklaration. Parameteröverföring

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

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel

2D1342 Programkonstruktion för F1, ht 2006

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

OOP Objekt-orienterad programmering

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

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Classes och Interfaces, Objects och References, Initialization

Objektorienterad programmering Föreläsning 2

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

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

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

SMD 134 Objektorienterad programmering

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Tentamen , Grundläggande programmering i Java

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

4.4 Swing ett interaktivt grafiskt gränssnitt

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

TENTAMEN OOP

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

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

ID1004 Laboration 3, 5-6 November 2012

Frames, menyer och GUI-program

JAVAUTVECKLING LEKTION 4

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

Att använda Java SE JDK 6

Föreläsning REPETITION & EXTENTA

Objektorienterad Programmering (TDDC77)

Språkkonventioner och redigering av tal.

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

Användarhandledning Version 1.2

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

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

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.

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

Föreläsnings 9 - Exceptions, I/O

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

E02 "The Review" Föreläsning 2, HT2013 Grunderna, repetition. Johan Leitet. Kurs: 1dv403 Webbteknik I

Att använda Java SE JDK 6

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

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

TDIU01 - Programmering i C++, grundkurs

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

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

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

OOP Objekt-orienterad programmering

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

NetBeans 5.5. Avsikt. Projektfönster

Objektorienterad programmering i Java

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

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

Tentamen , Introduktion till Java, dtaa98, dtea53

För att skriva data till skärmen ( konsolen) används objektet System.out tillsammans med metoden println eller print.

TDDD78 Viktiga begrepp, del 2

Transkript:

-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 passar en viss processortyp, men ett javaprogram kompileras till bytekod. När programmet skall köras, så måste en javatolk (intepretator) i datorn omvandla bytekoden till den rätta maskinkoden. Vanligt program Textfil Kompilering Maskinkod Länkning Körbar exe-fil Java-program Textfil Kompilering Bytekod Körs av javatolk (virtuell javamaskin) Javaprogram blir därför långsammare än andra program och man kan inte skapa körbara exe-filer. Man kan skapa två slags program: * Fristående program (applikationer) som kan köra var som helst av en javatolk. * Applets, som bara kan köras i webläsare. Språket java är ganska likt C++: * Mycket objektorienterat. * Allt består av klasser!! * Programkoden liknar C++, samma loopar, villkor osv. * Du slipper pekare!! Brogårdsskolan 1 Datainstitutionen

Javaspråket. Java liknar C++ med några undantag och några tillägg. Bl a slipper man pekare i Java. Allmänt Rader avslutas normalt med semikolon. Flera programrader kan samlas i block med blockparenteser (klammerparenteser). Kommentarer på en rad inleds med //. Kommentarer på flera rader inleds med /* och avslutas med */. Variabler deklareras som i C++. I javaprogram snackas det om metoder, som motsvarar funktioner i C++. Man skiljer mellan enkla och sammansatta datatyper: Enkla datatyper skrivs med liten bokstav: Typ Namn Antal bytes Talområde Heltal byte 1-128 till 127 short 2-32768 till 32767 int 4-2147483648 till 2147483647 long 8 +/- 10 18 Flyttal float 32 double 64 Tecken char 1 0 till 255 Logisk boolean 1 true eller false OBS Sammansatta datatyper utgörs av klasser och skrivs med stor bokstav. En användbar klass är String som lagrar strängar, och som har flera metoder som hanterar strängar. På sid 6 beskrivs klassen String! På sid 6 nämns också klasserna Integer och Double (obs börjar med stor bokstav!). Operatorer. +, - och * fungerar på samma sätt för heltal och flyttal. / (division) fungerar olika för heltal och flyttal: För heltal kapas decimalerna. Ex x=17/5 => x=3 Om täljaren eller nämnaren är flyttal, så fås decimaler. % (modulus) ger resten vid division av heltal. Ex. 17%5 => 2 ++ kallas increment-operator och ökar en variabel med 1. -- kallas decrement-operator och minskar en variabel med 1. Increment- och decrementoperatorn kan stå före eller efter en variabel med olika resultat: int i=4, j=4; int a=i++; //a tilldelas innan i ökar, a=4 int b=++j; //b tilldelas efter att j ökat, b=5 Andra operatorer. + = * = / = % = Dessa fyra operatorer ger kortare skrivsätt enligt dessa exempel: Ex. x+=8 är samma som x=x+8 Inkomst*=2000+y är samma som Inkomst=Inkomst* (2000+y) Brogårdsskolan 2 Datainstitutionen

In- och utmatning av data. OBS cout och cin används inte i Java, utan istället kan klassen System användas: System.out.print( sträng ) Skriver ut på skärmen str=system.in.read() Läser in från tangenbordet Villkor. if-sats Ex.if (x<o) //Villkor inom parenteser. a=2; c=8; else //else kan man utelämna d=5; //Här kan blockparenteserna tas bort //eftersom blocket består av en enda rad. Logiska operatorer. == Lika med (OBS!) OCH && (OBS!)!= Skild från ELLER < Större än ICKE! > Mindre än >= Större än eller lika med <= Mindre än eller lika med OBS Om du vill jämföra objektvariabler, så måste du använda metoden equals(): Ex.if (ObjA.equals(ObjB)) switch-sats. Ex. switch (a) //a skall vara en heltalsvariabel case 1:m=9; //Denna rad körs om a=l. break; case 2:m=6; //Block efter case går också bra. break; //break medför att switchsatsen case 3:m=35; //avslutas (förutsatt att a=2). break; default:h=8; //default-sats körs bara om ingen //case-sats stämmer med a. Brogårdsskolan 3 Datainstitutionen

Loopar. for-satsen Ex. for (int i=o ; i<16 ; i++)....; //En massa trevliga programrader. Ex. for (int i=20;i>o;i=i-2) //Räknaren räknare neråt.... ;//En massa trevliga programrader. while-satsen Ex. while (x>=7)....;//diverse programrader.....; do-while-satsen Ex. do....;//trevliga programrader.....; while (x>=7); Programblocket efter do upprepas så länge villkoret efter while är sant. break och continue break kan användas i alla loopar för att hoppa ur loopen innan alla varv är klara. Ex. do.... ; if (y=16) break; //När villkoret är sant hoppar.... ; //programmet ut ur do-while.... ; while (x>=7) contiue kan avsluta ett varv i loopen innan det är klart, och direkt påbörja nästa varv. Ex. do... ;... ; if (y=16) continue; //När villkoret är sant hoppar... ; //programmet över resten av loopen... ; //och startar nästa varv. while (x>=7) Brogårdsskolan 4 Datainstitutionen

Vektorer (arrayer). OBS Till skillnad från andra språk, behandlas vektorer i Java som objekt, vilket innebär att du måste tilldela minnesutrymme med new. Du behöver inte ta bort minne med delete, detta ordnar java på egen hand! Ex. int tal[]; eller på en rad: int tal[]=new int[10] tal=new int[10]; OBS Du kan tilldela värden direkt i deklarationen och behöver då inte använda new: Ex. int tal[5] = 3,6,4,2,8; OBS Javas många klasser ligger samlade i paket. Några vanliga paket: Lang java.applet.* java.awt.* java.io.* java.net.* javax.swing.* java.util.* Innehåller grundläggande egenskaper och funktioner. (följer alltid med!) Innehåller allt som behövs i applets. Abstract Windowing Toolkit innehåller windowskomponenter. Paket med in/ut-rutiner. Innehåller funktioner för nätverk och kommunikation. Innehåller grafiska komponenter, t ex dialogrutor Innehåller funktioner för vektorer och datastrukturer mm Om du vill använda en klass, så måste du importera den till programmet t ex: import java.awt.graphics import java.awt.* importerar klassen Graphics importerar alla klasser i awt Paketet Lang behöver inte importeras, det skickas alltid med. Kolla gärna klasser och metoder i hjälpen. Programmeringsmiljön Du kan jobba med ett DOS-baserat java-paket som du kan ladda hem gratis från sun.com. Du använder i första hand två program: * javac.exe Javakompilator * java.exe Javatolk Brogårdsskolan 5 Datainstitutionen

Klassen String Så här kan en Stringvariabel deklareras: String str; Klassen String innehåller att antal metoder: 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 returnerar str 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) Klassen Integer I denna klass finns bl a en metod som omvandlar en sträng till ett heltal: Integer.parseInt(str) Klassen Double I denna klass finns bl a en metod som omvandlar en sträng till ett decimaltal: Double.parseDouble(str) Brogårdsskolan 6 Datainstitutionen

Klassen Math Du måste skriva Math. före metoderna t ex Math.round(x) abs(a) absolutvärdet eller beloppet av talet a max(a,b) ger det största av talen a och b min(a,b) ger det minsta av talen a och b PI talet π E talet e = 2,7 exp(x) ger e x log(x) ger naturliga logaritmen av x sqrt(x) ger kvadratroten av x ceil(x) rundar av uppåt till heltal floor(x) rundar av nedåt till heltal pow(x.y) ger x y round(x) avrundar till heltal av typ long random() ger slumptal mellan 0 och 1 sin(x) cos(x) tan(x) asin(x) acos(x) atan(x) Att runda av ett tal till önskat antal decimaler i java är ganska besvärligt. Så här kan man göra: import java.text.*; //Deklarera en redigerare NumberFormat r=numberformat.getinstance(); //Ställ in önskat antal decimaler(utan denna metod får du // högst tre decimaler r.setmaximumfractiondigits(n) // Du måste till sist omvandla ditt tal, x, till en sträng // för att avrundningen skall göras r.format(x) Brogårdsskolan 7 Datainstitutionen

Applikationer Applikation 1 En applikation är ett fristående javaprogram, som kan köras med javatolken. Gör så här när du skall skriva din första java-applikation: 1. Starta JCreator. 2. Välj File/New/File. 3. Markera File Type till vänster, välj Java File och klicka Next. 4. Skriv namn på ditt projekt, bläddra fram en bra mapp under Location och klicka Finish. (I detta exempel blir namnet Hockey, eftersom java-klassen har detta namn.) Nu skapas filen Hockey.java. 5. Skriv in denna kod: public class Hockey public static void main(string args[]) // Alltid samma! System.out.println( Frölunda vann! ); Glöm alltså inte att klassnamnet skall vara samma som filnamnet. 6. Kompilera projektet med Build/Compile File. Nu skapas bytekod i filen Hockey.class 7. Kör projektet med Build/Execute File. Nu översätter javatolken den bytekod som finns i filen Hockey.class. 8. Stäng filen med File/Close. Kommentar: * En java-applikation skapas som en egen klass. * Alla java-applikationer måste ha en main-metod, som brukar deklareras på samma sätt i alla program.. * System är en java-klass. out är en klass som ärver från System och println är en metod som tillhör klassen out. Gör så här när du redan har skrivit en java-applikation: 1. Starta JCreator. 2. Öppna en gammal.java-fil och ändra koden. 3. Spara den nya filen med samma namn som din nya klass. Brogårdsskolan 8 Datainstitutionen

Applikation 2 Nu skall vi använda klassen javax.swing.* som innehåller grafiska komponenter, bl a JOptionPane, som är en meddelanderuta. Klassen javax.swing.* måste importeras. import javax.swing.*; // public class Hockey public static void main (String[] arg) JOptionPane.showMessageDialog(null, Heja Frölunda! ); System.exit(0); Metoden showmessagedialog skriver alltså ut texten innanför citattecken. Metoden System.exit(0) avslutar programmet. Applikation 3 a) Med metoden showinputdialog kan man också läsa in data med JOptionPane. Utskriften kan man dela upp på flera rader med hjälp av kontrolltecknet \n. Pröva detta program: import javax.swing.*; public class App3 public static void main (String[] arg) String namn; namn = JOptionPane.showInputDialog( Vad heter du? ); JOptionPane.showMessageDialog(null, Välkommen\n + namn); System.exit(0); b) Programmet skall också fråga efter antal och sedan skriva lika många rader enligt figuren. Java Applikation 4 a) Skapa en applikation med JOptionPane som först läser in ett namn (ett ord!) och sedan visar antalet bokstäver. b) Programmet skall dessutom visa namnet baklänges. Brogårdsskolan 9 Datainstitutionen

Applikation 5 a) Skapa en applikation med JOptionPane, som först läser in sidorna a och b i en rätvinklig triangel och sedan beräknar och visar hypotenusans längd. b) Programmet skall visa en varningsruta om a eller b är negativ. c) Resultatet skall visas med två decimaler. Applikation 6 Så här kan man läsa in flera tal på en gång: //Denna klass måste importeras! import java.util.*; String s=joptionpane.showinputdialog( Ange två tal(med mellanslag) ); //Skapa en hjälpvariabel som delar upp strängen s i delar: StringTokenizer tok = new StringTokenizer(s); //Plocka ut de två talen ur strängen s med metoden nexttoken: int tal1 = Integer.parseInt(tok.nextToken()); int tal2 = Integer.parseInt(tok.nextToken()); Klass StringTokenizer har bl a dessa tre metoder: nexttoken() counttokens() hasmoretokens() //Ger nästa del i strängen //Ger antalet återstående delar i strängen //Är true om det finns fler delar i strängen a) Skapa en applikation med JOptionPane, som läser in tre heltal och sedan visar summan av talen. b) Programmet skall läsa in ett godtyckligt antal heltal och visa summan. Applikation 7 a) Skapa en applikation med JOptionPane som visar 5 slumptal mellan 1 och 10. random ger slumptal av typ double, som du kan omvandla till heltal genom att skriva (int) framför: slump=(int)(math.random()*(största-minsta+1)+minsta) b) Skapa ett Hi-Lo-spel. Programmet skall först slumpa ett heltal mellan 1 och 100. Sedan får användare gissa. Efter varje gissning visas För högt! eller För lågt! tills svaret är rätt. Applikation 8 Strängar av typ String kan man inte jämföra så här: if (str1==str2)... Istället använder man metoden equals: if (str1.equals(str2)) Skapa en applikation som först läser in två namn med mellanslag och sedan meddelar om namnen är lika eller inte. Brogårdsskolan 10 Datainstitutionen

Applikation 9 Skapa en applikation som först läser in en mening och sedan räknar antalet ord. Applikation 10 Med dialogrutan showconfirmdialog kan du välja mellan olika alternativ. Om du skriver raden int button=joptionpane.showconfirmdialog(null, "Smakade pizzan bra!"); så dyker denna ruta upp Knapparna är numrerade 0, 1, 2,.. från vänster. När du stänger rutan, så returneras numret på den knapp som stängde rutan. Om du stänger med krysset så returneras -1. Med en if-sats kan du kolla vilken knapp som stängde rutan: if (button==1)....... //Stängde någon med No? Man kan ge dialogrutan andra knappar med en tredje parameter. Här är en vanlig variant: int button=joptionpane.showconfirmdialog(null,"är du gift?","svara",joptionpane.yes_no_option); Här är en annan variant: int button=joptionpane.showconfirmdialog(null,"vill du fortsätta?", "Bekräfta",JOptionPane.OK_CANCEL_OPTION); Skapa en applikation som visar en ja/nej-fråga med en showconfirmationdialog. Om användaren svarar Ja eller Nej, så skall en showmessagedialog visa om svaret är rätt eller fel, och därefter skall programmet avslutas. Om användaren väljer Cancel, så skall programmet avslutas omedelbart. Applikation 11 Om man klickar på Avbryt i en showinputdialog-ruta, så returneras värdet null. Detta kan man använda för att hoppa ut ur en loop med break. Skapa en applikation som testar addition genom att visa slumpade additionsexempel och läsa in svar med showconfirmadialog. Efter varje addition skall resultatet visas med en show- MessageDialog. Programmet skall avslutas när användaren väljer Avbryt i showconfirmdialog. Brogårdsskolan 11 Datainstitutionen

Applikation 12 Nu skall det handla mest om metoder, men först.... En java-applikation kan innehålla flera klasser i samma fil, men bara en av klasserna får vara public, och namnet på filen skall vara samma som namnet på public-klassen. Denna filen skall alltså ha namnet Stefan.java: import javax.swing.*; class Arne - - - - class Elsa - - - - public class Stefan - - - - Här kommer ett exempel på en metod (kuben) som beräknar ett värde. En sådan metod måste avslutas med return. Lägg också märke till att metoden kuben finns i samma klass som main. public class Matte public static void main (String[] arg) int x; x = kuben(5) JOptionPane.showMessageDialog(null, Resultat: + x); System.exit(0); public static int kuben(int a) return a*a*a; // returtyp = int Brogårdsskolan 12 Datainstitutionen

Här kommer samma exempel, men nu ligger metoden kuben i en egen klass. Lägg märke till skillnaden när metoden anropas! public class Matte public static void main (String[] arg) int x; x = Matteklass.kuben(5) JOptionPane.showMessageDialog(null, Resultat: + x); System.exit(0); class Matteklass public static int kuben(int a) return a*a*a; En metod kan naturligtvis ha flera argument. Det finns också metoder utan returvärde. Java Uppgift: Skriv metoden Last som används i detta program: public class Namnklass public static void main (String[] arg) String Namn=JOptionPane.showInputDialog( Skriv namn! ); char x=useful.last(namn); JOptionPane.showMessageDialog(null, Sista tecken: + x); System.exit(0); Brogårdsskolan 13 Datainstitutionen

Applets Applet 1 En applet skriver du också i en texteditor med filtillägg.java och kompilerar till class-fil, men programmet kan bara köra från en webläsare. Du måste alltså lägga in en länk till din applet i en HTML-fil. Gör så här med JCreator: 1. Välj File/New/Project, markera Basic Java Applet och klicka Next. 2. Ge din applet ett namn, välj lämplig mapp under Location och klicka Next. 3. Kolla att det ser ungefär så här och klicka sedan Finish. 4. Öppna mapparna i fönstret FileView till vänster, och dubbelklicka på javafilen. Så här kan det se ut 5. Skriv eller kopiera denna kod i kodfönstret, och spara: import java.applet.applet; import java.awt.graphics; public class GuldApplet extends Applet public void paint(graphics g) g.drawstring("frölunda vinner!",5,25); 6. Kompilera filen genom att välja Build/Compile Project eller F7. Nu skapas filen GuldApplet.class i mappen classes. Brogårdsskolan 14 Datainstitutionen

7. Appleten måste ligga på en websida. Om du öppnar HTML-filen, så har JCreator skapat denna kod: Lägg märke till raden code = GuldApplet.class som kopplar din applet till HTML-filen 8. Välj Build/Execute Project eller F5. Nu startar SUNS program appletviewer.exe som kör HTML-filen med din applet. 9. Du kan också öppna HTML-filen i en webläsare Kommentar: Eftersom en applet körs hemma hos den som öppnar websidan, så kan en applet inte göra vad som helst: En applet kan t ex inte starta program eller öppna filer på den dator där websidan öppnas. Brogårdsskolan 15 Datainstitutionen

Analys av applet GuldApplet 1 import java.applet.applet; 2 import java.awt.graphics; 3 4 public class GuldApplet extends Applet 5 6 public void paint(graphics g) 7 8 g.drawstring("frölunda vinner!",5,25); 9 Rad 1 Rad 2 Rad 4 Rad 6 Här importeras klassen Applet med funktioner som hanterar webläsaren. Här importeras klassen Graphics som behövs för att rita text i ett Windowsfönster. Varje applet skapas som en ny klass. extends Applet betyder att klassen GuldApplet ärver från klassen Applet. Varje applet ärver fem metoder från klassen Applet: init() start() stop() paint() destroy() Här kan du lägga in deklarationer när programmet laddas mm. Metoden är tom från början. Här bestämmer du vad som skall hända när programmet startar. Metoden är tom från början. Avslutar alla aktiviteter när användaren lämnar websidan. Metoden är tom från början, och behöver sällan ändras. Allt som syns på skärmen ritas av paint. Metoden måste alltid ha ett argument av klassen Graphics, t ex paint(graphics g) Rensar minnet när appleten avslutas. Bör inte ändras. Om du ändrar en metod så gör du en override på metoden. I exemplet ovan gör vi override på metoden paint(). Rad 8 Klassen Graphics innehåller flera grafikmetoder. Här använder vi drawstring som skriver text i det aktuella fönstret. Lägg märke till punktnotationen! hjälpen Brogårdsskolan 16 Datainstitutionen

Applet 2 Klassen Graphics innehåller div grafiska metoder, t ex drawstring. Med klassen Font kan du ändra textegenskaper och med klassen Color kan du ändra färg. Du måste först skapa ett nytt objekt med new. Sedan kan du ändra font eller färg med metoderna setfont() och setcolor(). Ex Color c=new(0,255,255); g.setcolor(c); //Om g är ett objekt av typen Graphics Med den enkla datatypen int kan vi inte omvandla tal till text och tvärtom. Istället använder vi klassen Integer, som är en s k wrapper class till int. Andra wrapper-klasser är Boolean, Float, Double, Long, Character (alla skrivs med stor bokstav!). Klassen Integer har bl a metoden parseint() som omvandlar text till tal. Här kommer en applet som skriver ut text. För att kunna ändra texten och teckensnittet i HM- L-filen utan att ändra i själva javakoden, så använder vi taggen PARAM som skickar värden från HTML-koden till applet-koden. import java.applet.applet; import java.awt.graphics; import java.awt.font; import java.awt.color; public class Mintext extends java.applet.applet String txt; String tsnitt; String sizetxt; int size; public void init() txt=getparameter("text"); if (txt==null) txt= "Frölunda!"; // Hämtar värde från PARAM -taggen tsnitt =getparameter("teckensnitt"); // Värde från PARAM -taggen if (tsnitt==null) tsnitt= "TimesRoman"; sizetxt =getparameter("storlek"); if (sizetxt==null) sizetxt= "28"; // Värde från PARAM -taggen size=integer.parseint(sizetxt,10); // Omvandlar till tal hjälpen Brogårdsskolan 17 Datainstitutionen

public void paint(graphics g) Font f=new Font(tsnitt,Font.BOLD,size); Color c=color.red; g.setfont(f); g.setcolor(c); g.drawstring(txt,5, 50); Så här ser en enkel HTML-fil ut. Lägg märke till PARAM-taggen! <HTML> <HEAD> <TITLE>Frölunda</TITLE> </HEAD> <BODY> <APPLET CODE="Mintext.class" WIDTH=400 HEIGHT=100> <PARAM NAME="text" VALUE="Frölunda vann äntligen!!!"> <PARAM NAME="teckensnitt" VALUE="Arial"> <PARAM NAME="storlek" VALUE="10"> </APPLET> </BODY> </HTML> hjälpen Brogårdsskolan 18 Datainstitutionen

Applet 3. Denna applet skall med hjälp av en oändlig loop uppdatera en klocka varje sekund. För att loopen inte skall blockera processorn hela tiden, så använder vi multitasking: Klockans loop körs i en tråd (thread). Då kan processorn jobba med annat parallellt med det som händer i tråden. Så här ser appleten ut: import java.applet.applet; import java.awt.*; import java.util.date; public class Klocka extends java.applet.applet implements Runnable Font teckensnittet=new Font("Helvetica",Font.BOLD,18); Date tiden; Thread trad; public void start() if (trad==null) trad=new Thread(this); trad.start(); public void stop() if (trad!=null) trad.stop(); trad=null; public void run() while (1<2) tiden=new Date(); repaint(); try Thread.sleep(1000); catch (InterruptedException e) Tråden skapas och startas När tråden startas så körs automatiskt metoden run() Oändlig loop. Varje sekund skapas nytt tiden-objekt. repaint anropar metoden paint. public void paint(graphics g) g.setfont(teckensnittet); g.drawstring(tiden.tostring(),10,30); Första raden i klassen Klocka ser ut så här: Objektet tiden omvandlas till en sträng. Brogårdsskolan 19 Datainstitutionen

public class Klocka extends java.applet.applet implements Runnable I Java kan en ny klass bara ärva från en enda klass till skillnad från C++ som tillåter s k multipla arv. I stället kan man skapa s k gränssnitt, med div metoder mm. Runnable är ett gränssnitt med olika metoder som behövs när man jobbar med trådar. För att komma åt dessa metoder måste vår applet implementera gränssnittet Runnable. Så här kan HTML-filen se ut: <HTML> <HEAD> <TITLE>Klocka</TITLE> </HEAD> <BODY> <APPLET CODE="Klocka.class" WIDTH=300 HEIGHT=70>Applet funkar ej!</applet> </BODY> </HTML> hjälpen Brogårdsskolan 20 Datainstitutionen

Applet 4. Nu blir det rullande text! Här använder vi också en tråd, eftersom texten skall rulla hela tiden. import java.awt.*; public class Scrolltxt extends java.applet.applet implements Runnable Font teckensnittet=new Font("Helvetica",Font.BOLD,18); Thread trad; int xkoord=400; String texten; public void init() texten=getparameter("text"); if (texten==null) texten= "Ingen text definierad i HTML-koden"; public void start() if (trad==null) trad=new Thread(this); trad.start(); public void stop() if (trad!=null) trad.stop(); trad=null; public void run() while (1<2) xkoord--; if (xkoord< -200) xkoord=400; repaint(); try Thread.sleep(20); catch (InterruptedException e) public void paint(graphics g) g.setfont(teckensnittet); g.drawstring(texten,xkoord, 30); Brogårdsskolan 21 Datainstitutionen

Så här kan HTML-filen se ut: <HTML> <HEAD> <TITLE>Scrolltxt</TITLE> </HEAD> <BODY> <APPLET CODE="Scrolltxt.class" WIDTH=400 HEIGHT=70> <PARAM NAME="text" VALUE="Frölunda vann, jajamensan!!!"> </APPLET> </BODY> </HTML> hjälpen Brogårdsskolan 22 Datainstitutionen

Några rader om grafik. Klassen Graphics innehåller metoder för att rita olika figurer mm. drawline() drawrect() fillrect() drawroundrect() fillroundrect() drawpolygon() fillpolygon() drawoval() filloval() drawarc() fillarc() Ritar linjer Ritar ofyllda rektanglar Ritar fyllda rektanglar Ritar rundade rektanglar Ritar fyllda rundade rektanglar Ritar ofyllda polygoner Ritar fyllda polygoner Ritar ofyllda cirklar och ellipser Ritar fyllda cirklar och ellipser Ritar cirkelsegment Ritar cirkelsegment En färdig bild hämtar du så här: Image bild; bild=getimage(getcodebase(), minbild.jpg ); Först skapar du ett objekt av klass Image. Sedan hämtar du bilden med metoden getimage(). getcodebase returnerar sökvägen till den mapp där appleten ligger. Bilden skall alltså ligga i samma mapp som appleten! Java klarar bilder med formaten JPG och GIF. Du skriver ut bilden så här: g.drawimage(bild,x,y,this); Ordet this betyder att bilden skrivs ut i den applet som paint() ligger i. Det finns 13 färdiga färgvariabler: Color.white Color.green Color.lightGrey Color.gray Color.darkGrey Color.blue Color.green Color.red Color.red Color.orange Color.pink Color.cyan Color.yellow Color.magenta Brogårdsskolan 23 Datainstitutionen

Färg ändrar du enkelt så här: g.setcolor(color.red); //Tillhör klassen Graphics Du kan också blanda egna färger: Color c=new(0,255,0); g.setcolor(c); //Skapar ett nytt färgobjekt Du kan ändra bakgrundsfärg så här: setbackground(color.black); //Fristående metod Du kan ändra förgrundsfärgen så här: setforeground(color.blue); //Fristående metod Applet 5. hjälpen Skriv en applet som ritar en blå rektangel med gul bakgrund i ett fönster på websidan. Applet 6. Skriv en applet som visar en trevlig bild i ett fönster på websidan. Brogårdsskolan 24 Datainstitutionen

Applets som använder händelser. import java.awt.event; import java.awt.color; import java.awt.graphics; public class RitaCirklar extends java.applet.applet int xkoord; int ykoord; boolean knapp; public void init() setbackground(color.black); knapp=false; public boolean mousedown(event evt, int x,int y) xkoord=x; ykoord=y; knapp=true; repaint(); return true; public boolean mouseup(event evt, int x,int y) xkoord=x; ykoord=y; knapp=false; repaint(); return true; metoderna mousedown o mouseup anropas automatiskt, när du klickar med musen Ett objekt av klassen Event måste finnas bland parametrarna! public void update(graphics g) paint(g); Varför override på update? public void paint(graphics g) if (knapp) g.setcolor(color.yellow); g.drawoval(xkoord-15,ykoord-15,30,30); else g.setcolor(color.red); g.drawoval(xkoord-15,ykoord-15,30,30); Metoden drawoval ritar cirklar och ellipser! Brogårdsskolan 25 Datainstitutionen

Applet som ritar linjer. import java.awt.graphics; import java.awt.color; import java.awt.event; import java.awt.point; public class Linjer extends java.applet.applet int antallinjer=0; int maxantallinjer=10; String linjerkvar="10"; Point startlinje; Point stopplinje; Point noll=new Point(0,0); Point[] starter=new Point[maxAntalLinjer+1]; Point[] stoppar=new Point[maxAntalLinjer+1]; public void init() setbackground(color.yellow); public boolean mousedown(event evt,int x, int y) startlinje=new Point(x,y); return true; public boolean mouseup(event evt, int x, int y) stopplinje=new Point(x,y); sparalinje(startlinje,stopplinje); return true; public boolean mousedrag(event evt, int x, int y) stopplinje=new Point(x,y); repaint(); return true; void sparalinje(point ena, Point andra) if (antallinjer<=maxantallinjer) antallinjer++; starter[antallinjer]=ena; stoppar[antallinjer]=andra; startlinje=noll; stopplinje=noll; int i=maxantallinjer-antallinjer; Integer I=new Integer(i); Brogårdsskolan 26 Datainstitutionen

linjerkvar=i.tostring(); repaint(); public void paint(graphics g) g.setcolor(color.red); g.drawline(startlinje.x,startlinje.y,stopplinje.x,stopplinj e.y); g.setcolor(color.blue); if (antallinjer<=maxantallinjer) g.drawstring("du har " + linjerkvar + " linjer kvar att rita!",10,10); else g.drawstring("du har för många linjer!",10,10); for (int i=1;i<=antallinjer;i++) g.drawline(starter[i].x,starter[i].y,stoppar[i].x,stoppar[i ].y); Brogårdsskolan 27 Datainstitutionen

Applet som styr en orm med tangenthändelser. import java.awt.graphics; import java.awt.color; import java.awt.event; public class Orm extends java.applet.applet implements Runnable int tangent; int xkoord; int ykoord; Thread trad; public void init() xkoord=this.size().width/2; ykoord=this.size().height/2; setbackground(color.black); public void start() if (trad==null) trad=new Thread(this); trad.start(); public void stop() if (trad!=null) trad.stop(); trad=null; public boolean keydown(event evt, int key) tangent=key; return true; public void run() while (true) switch (tangent) case Event.DOWN: ykoord+=5; Brogårdsskolan 28 Datainstitutionen

break; case Event.UP: ykoord-=5; break; case Event.LEFT: xkoord-=5; break; case Event.RIGHT: xkoord+=5; break; if (xkoord>this.size().width) xkoord=this.size().width; if (xkoord<0) xkoord=0; if (ykoord>this.size().height) ykoord=this.size().height; if (ykoord<0) ykoord=0; repaint(); try Thread.sleep(100); catch (InterruptedException e) public void update(graphics g) paint(g); public void paint(graphics g) g.setcolor(color.red); g.filloval(xkoord,ykoord,10,10); Brogårdsskolan 29 Datainstitutionen

Applet som använder knappar och metoden action. import java.awt.*; import java.applet.*; public class KnappDemo extends Applet Image bild; public void init() //Skapa två knappar med text! Button b1=new Button("Bild1"); Button b2=new Button("Bild2"); //Lägg in knapparna add(b1); add(b2); //Använd metoden action för att kolla om något är på gång! // Lägg märke till returtypen! public boolean action(event evt, Object arg) //Kolla om en knapp (Button) skickade meddelandet! if (evt.target instanceof Button) // parametern arg innehåller texten på knappen. // Typomvandla till String String text=(string)arg; // Kolla vilken text, som knappen har! if (text.equals("bild1")) bild=getimage(getcodebase(), "gubbe.gif"); if (text.equals("bild2")) bild=getimage(getcodebase(), "tree.gif"); // Anropa metoden repaint(), som anropar paint, // som ritar upp bilden. repaint(); return true; public void paint(graphics g) g.drawimage(bild,20,20,this); hjälpen Brogårdsskolan 30 Datainstitutionen

Diverse komponenter. Knapp Textruta Konstruktor: Button knappa = new Button( Röd ) Metoder: getlabel() Returnerar texten på knappen setlabel(string) Sätter ny text på knappen Konstruktor: TextField ruta1 = new TextField(30) //Textruta med 30 tecken Metoder: gettext() Returnerar texten i textrutan settext(string) Lägger in text i textrutan Alternativknapp Konstruktor: CheckboxGroup knappar = new CheckboxGroup // Måste först skapa // en grupp Checkbox ruta1 = new Checkbox( Röd, knappar,false) Checkbox ruta2 = new Checkbox( Blå, knappar,true) Checkbox ruta3 = new Checkbox( Gul, knappar,false) Metoder: getstate() Returnerar true om knappen är markerad setstate(boolean) Ändrar markeringen getlabel() Returnerar knappens text setlabel(string) Sätter ny text på knappen Brogårdsskolan 31 Datainstitutionen