Denna lab ber er implementera ett enkelt ritprogram. Ritprogrammet ska ha en Undo-knapp som kan ta bort det man tidigare ritat.
Magnus Myreen, september 2016.
Ni får två filer:
DrawProg.java
är ett skelett för klassen ni bör implementeraMain.java
är user interface för ritprogrammet (behöver inte editeras!)Kör programmet med att köra main
i Main.java
.
Ni kommer att behöva flera klasser (och flera filer) för att implementera DrawProg
klassen. Obs: varje fil måste ha raden
import java.awt.*;
bland imports där uppe för att vi använder oss av Graphics
och Color
.
Er uppgift är att implementera klassen DrawProg
så att ritprogrammet har beteendet som demonstreras i följande video:
https://www.youtube.com/watch?v=Knxpr1ZTFYo
Här är delarna som er lösning ska bestå av:
Drawable
: en interface
som har en metod draw
. Denna metod bör ta ett Graphics
-objekt som parameter. Metoden behöver inte returnera något, dvs returtyp: void
.
Line
, Oval
och Rectangle
klasser som implementerar Drawable
. Dessa klasser bör ha constructors som tar koordinater för ritningen som parametrar. Koordinaterna ska användas av draw
metoden.
DrawableStack
: denna klass bör implementera en stack datastruktur för objekt av typen Drawable
. OBS: ni får inte använda Javas fördefinierade klasser Stack
, List
, ArrayList
, osv. Er stack klass bör implementera tre metoder: push
, pop
och draw
. Det är meningen att draw ritar alla objekt som finns i stacken. Stacken får inte ha någon övregräns på hur många objekt som kan sättas in med push
, och pop
ska inte göra något för en tom stack. Tips: man kan implementera DrawableStack
med att implementera en dynamisk array för Drawable
objekt.
DrawProg
: denna klass bör använda alla delar ovan för att implementera det enkla ritprogrammet.
OBS: Kom ihåg att testa halvfärdiga program! Det lönar sig speciellt att testa ritprogrammet innan DrawableStack
och Undo-knappen är implementerade.
Denna extra uppgift behöver inte redovisas för handledare.
Ifall ni vill fortsätta med en frivillig extra uppgift kan ni implementera en Redo-knapp. För att få en Redo-knapp till user-interfacet ska ni byta raden
bpanel.add(b4);
till följande i Main.java
:
bpanel.add(b4);
JButton b5 = new JButton("Redo");
b5.addActionListener(e -> { drawProg.redo(); panel.repaint(); });
bpanel.add(b5);
Ni bör då implementera en redo
metod i DrawProg
klassen och vill kanske ha nya metoder i DrawableStack
. Koden för implementeringen av Redo-knappen behöver inte vara lång.