Laboration 1
Förberedande uppgifter
Kösystemet Sima för hjälp och redovisning
Vi använder Sima för kö till hjälp och redovisning. Välj prutt
i Sima. Om du inte använt Sima tidigare så fråga någon av lärarna.
Underkatalog för kursen
Detta bör vara självklart för alla: Skapa en egen katalog för kursen
där varje labb får en underkatalog (som vid behov själva ges underkataloger).
Laboration 1 - En liten knappkomponent
Uppgiften i labben är ganska liten men för den som är Java-nybörjare är det
mycket nytt som kan vara svårt. De första 3 föreläsningarna + första övningen
går igenom det som behövs.
Mål
Att få grundläggande förståelse för Javas grafiska komponenter,
fristående grafiska program, händelser & lyssnare, applets och paket.
Innehåll
- Skapa och köra enkla fristående grafiska program.
- Använda grafikbibliotek.
- Göra en egen grafisk komponent genom att bygga på
en komponent från ett grafikbibliotek.
- Implementera knapptryckning, att "något händer" när man trycker på en knapp.
- Skapa och köra enkla applet-program.
- Göra den enklaste formen av paket.
Uppgiften har detaljerade instruktioner i steg.
Den som tycker uppgiften är lätt behöver inte göra alla steg.
Ni ska redovisa program från och med uppgift 4B. Läs igenom
instruktionen så att ni får med allt som krävs.
Gör det som behövs från de tidigare stegen men se till att ni kan svara på
frågor om alla deluppgifter.
Uppgift 1 – Gör ett fristående javaprogram
Skriv ett program som öppnar ett fristående fönster med ram på datorskärmen.
Gör det genom att skriva en klass som ärver från biblioteksklassen
JFrame .
Alla initieringar av fönstret ska göras i den nya klassens konstruktor!
Se till att författarnas namn står i fönstret. Ge fönstret en snygg bakgrundsfärg.
Följande metodanrop i konstruktorn åstadkommer att programmet avslutas
när man stänger fönstret:
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Prova först utan denna rad, man kan enkelt kommentera bort den.
Hur avslutas programmet då?
Uppgift 2 – Skapa en utvidgad knappkomponent med två tillstånd
Skapa en klass MyButton som ärver från JButton .
Knappen ska ha två olika tillstånd.
Låt tillstånden representeras av färg och text på knappen. Det behövs alltså
två färger och två texter för varje knapp. Knappens aktuella tillstånd ska synas
genom dess bakgrundsfärg och text på knappen.
Knappens konstruktor bör ha huvudet
MyButton(Color c1, Color c2, String s1, String s2)
Definiera en metod toggleState() i MyButton .
Toggle brukar betyda att man växlar mellan två tillstånd.
Metoden ska ändra knappens tillstånd, alltså byta både färg och text till
den andra. Så här kan det se ut när man skapar objekt av
MyButton
new MyButton(Color.white, Color.cyan, "On", "Off")
new MyButton(Color.green, Color.red, "Run", "Stop")
Uppgift 3 – Knapp i fönstret
Utvidga uppgift1-programmet så att en knapp (eller några knappar) från uppgift 2
läggs ifönstret. Använd metoden add(...) i JFrame .
Kör programmet och tryck på knappen. Tyvärr händer inget.
Uppgift 4 – Knapp att trycka på
del A: För att en knapptryckning ska ha effekt måste det finnas ett lyssnarobjekt
som lyssnar på knappen. Lyssnarobjektet ska vara av en klass som implementerar
interfacet ActionListener vilket innebär att klassen har metoden
public void actionPerformed(ActionEvent e) { ... } .
Låt ramklassen (den som ärver från JFrame ) implementera ActionListener
och låt dess actionPerformed() anropa toggleState() .
Kom ihåg att koppla lyssnarobjektet till knappen!.
Kontrollera att det fungerar!
del B:
Tag bort lyssnaregenskapen från fönsterklassen (eller tag en kopia så att ni har
kvar båda versionerna). Låt istället knappkomponenten lyssna på sig själv, alltså låt
MyButton implementera ActionListener och ha metoden
public void actionPerformed(ActionEvent e) som anropar toggleState() .
Skapa flera (minst två) knappar och lägg i fönstret. Provkör! Kontrollera att knapparnas tillstånd
ändras oberoende av varandra.
Uppgift 5 – En applet
Skriv ett Applet-program med samma funktionalitet som 4B, dvs visar minst två knappar
som man kan trycka på oberoende av varandra. Samma klass MyButton
ska förstås användas här. För att köra en applet behövs en html-fil.
Här är en minimal sådan:
Labb1.class är den kompilerade versionen av Labb1.java
Programmet körs i ett fönster som är 300 pixlar brett och 150 pixlar högt.
Appletprogram kan köras på webbsidor eller i appletviewer som startas från ett terminalfönster.
I en IDE (utvecklingsmiljö) kan applets köras på andra sätt.
Även om slutdestinationen för ett applet-program är en webbsida så använder man helst
appletviewer under testfasen.
appletviewer Labb1.html
Här kör vi appleten Labb1.class som är den kompilerade
versionen av Labb1.java i ett fönster som är 300 pixlar
brett och 150 pixlar högt.
Uppgift 6 – Liten paketövning
Ett paket definieras av en underkatalog. Välj ett paketnamn, gör en underkatalog med
det namnet och lägg knappklassen MyButton där.
Skriv lämpliga package och import
överst i inblandade javafiler så att det hela fungerar igen.
Hur gör man paket? Läs här!
Uppgift 7 – Rita UML-klassdiagram
över knappkomponent, applet och fristående program. Alla klasser (nya och
från bibliotek) ska vara med men det räcker att skriva klassernas namn
i rutorna. Inga detaljer om insidorna, dvs metoder och variabler, behövs.
Rita gärna diagrammet innan programmen skrivs.
Att redovisa för grunduppgift
Visa upp, provkör och och förklara följande:
- Knappkomponenten enligt 4B i ett eget paket
- Minst två objekt av komponenten i ett fristående fönster.
Gruppmedlemmarnas namn ska synas i fönstret.
- Minst två objekt av komponenten i en applet.
- Ett UML-klassdiagram över alla klasser som används och hur de hänger
samman.
Endast klassnamn behöver stå i UML-rutorna, inga metoder eller
variabler alltså.
Visa hur knapptryckningar ändrar knappobjektens tillstånd.
När handledaren är nöjd, be om hans/hennes underskrift på ditt kvittensblad!
Kvittensbladet finns för utskrift på kurshemsidan under Laborationer.
Extrauppgift för högre betyg
Mål: Att få en ökad förståelse för händelser och lyssnare, hur en
knapptryckning kan påverka sin "omvärld".
Att kunna ge indata till ett fristående program via kommandoraden.
Uppgift
Skriv ett program som liknar grunduppgiftens med ett fristående fönster
och knappar. Antalet knappar ska anges på kommandoraden när programmet
startas, t.ex. om man vill ha sex st knappar:
java labb1X 6
Knapparna ska ha olika texter men får ha samma färger.
Programmet måste kunna ta emot ett godtyckligt antal knappar men det duger att att
provköra med 3–4 stycken.
Ge alla data på kommandoraden, t.ex. så här
java labb1X 3 On Off Run Stop Mamma Mia
Nu ska tre knappar skapas. Den första har de två tillståndstexterna "On" och "Off",
den tredje har "Mamma" och "Mia".
Data från kommandoraden kommer till programmet som den String –vektor
som är parameter till metoden main() .
I klassen Integer finns metoden Integer.parseInt() som omvandlar
String till int . Läs dokumentationen!
Programmets funktionalitet
Alla knappar ska visas i fönstret men när man trycker på en knapp ska alla andra
knappar ändra utseende. Den man tryckte på ska inte ändras.
Vilket av alternativen 4A och 4B för lyssnarens
placering passar bäst i den här uppgiften? Kan man tänka sig en helt annan konstruktion?
Programmet måste fungera för godtyckligt antal knappar.
Löses t.ex. genom att använda en array , alltså en struktur med typen
MyButton[] .
Att redovisa för extrauppgift
Visa upp, provkör och och förklara följande:
- Progam enligt specifikationen ovan.
- UML-diagram med endast klassnamn.
Be om underskrift på kvittensbladet.
|