Labb1
- Inlämningsdatum Inget inlämningsdatum
- Poäng 0
Kösystemet Queue (http://queue.csc.kth.se) för hjälp och redovisning under schemalagd labbtillfälle.Vi använder Queue för kö till hjälp och redovisning. Välj prutt i Queue. Om du inte använt Queue tidigare så fråga någon av lärarna. |
||
Laboration 1 - En liten knappkomponent
Föreläsning F1 och F2 samt 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 och lyssnare.
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.
Ni ska redovisa program från och med uppgift 4. Gör det som behövs och 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. Skapa en klass med namnet MyFrame
.
Krav:
-
MyFrame
ska ärva från biblioteksklassenJFrame
. -
De kod du väljer att placera i konstruktoren ska vara den kod som ska vara i konstruktoren och kod som inte ska vara i konstruktoren ska inte vara där.
-
Se till att du har den kod som gör att programmet avslutas när man sklickar på avstängningsknappen för fönstret.
Se till att författarnas namn står i ramen som fönstrets titel. Ge fönstret din favoritfärg som bakgrundsfärg.
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 knappens bakgrundsfärg och text på knappen. Det behövs alltså två olika bakgrundsfärger och två texter för varje objekt av MyButton.
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.
Uppgift 3 – Knapp i fönstret
Utvidga uppgift1-programmet så att några knappar (minst 2 knapper) med olika färger och text uppgift 2 läggs i fönstret. Kör programmet.
- Syns knapparna?
- Vad händer när du klickar på knapparna?
Uppgift 4 – Knapp att trycka på
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
.
del A: Betrakta följande UML-diagram:
Översätt UML-diagrammet till java-kod genom att låta MyFrame
implementera ActionListener
och låt dess actionPerformed()
anropa toggleState()
. Kom ihåg att koppla lyssnarobjektet till knapparna! Kontrollera att det fungerar!
⚠️ Ta en kopia av din kod så att du har den kvar för redovisningen. Annars kod för del B skriver över del A.
del B: Betrakta följande UML-diagram:
Översätt UML-diagrammet till java-kod genom att först ta bort all lyssnaregenskaper i koden så att det inte återstår skräpkod från del A. Låt sedan MyButton
implementera ActionListener
och ha metoden actionPerformed
som anropar toggleState()
. Kontrollera att knapparnas tillstånd ändras oberoende av varandra.
⚠️ Ta en kopia av din kod så att du har den kvar för redovisningen.
del C : Betrakta följande UML-diagram:
Översätt UML-diagrammet till java-kod genom att först ta bort all lyssnaregenskaper i koden så att det inte återstår skräpkod från tidigare deluppgifter. Skapa en klass Ear som implementerar interfacet ActionListener
. Lägg till actionPerformed
och se till att toggleState
anropas i kroppen för actionPerformed
. För att objekt av Ear ska kunna komma åt toggleState
så behöver du se till att kopplingar mellan olika objekt sätts korrekt (⚠️observera dubbelriktade pilen mellan MyButton
och Ear
).
Att redovisa för grunduppgift
- Knappkomponenten.
- Minst två objekt av komponenten i ett fristående fönster.
Gruppmedlemmarnas namn ska synas i fönstret. - Förklara hur du har översätt UML-diagrammet till koden. Hur har du översätter pilarna till kod.
- Varför har du placerat metoderna och anrop till dem
ochaddActionListener,
actionPerformedtoggleState
där de är placerade i koden? (UML diagrammet saknar den information för att det är en uppgift till dig att välja mest lämplig plats i koden, taget att resten UML-diagrtammet har du översatt korrekt).
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 "omvärlden".
- 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
–array 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, 4B eller 4C 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
- Progam enligt specifikationen ovan.
<