Hint til tegneprogram
Representere figurer
Ta utgangspunkt i eksempelklassene Figur og Punkt, og lag en ny klasse for hver figurtype. Du skal ha følgende subklassehierarki:
- Figur (abstrakt superklasse)
- Punkt
- Linjestykke
- Rektangel
- Sirkel
- Trekant
Utvid evt. med flere figurtyper etter hvert.
Lag et testprogram
Lag deretter et testprogram som oppretter objekt av de forskjellige figurklassene, utfør objektmetoder på disse objektene og sjekk at de oppfører seg som forventet. La gjerne klassene få en metode toString som kan brukes for å inspisere verdiene til objektvariablene.
Håndtere mange figurer
Brukeren skal kunne opprette vilkårlig mange figurer, og listen med figurer skal tegnes ut på skjermen.
En grei løsning er å lage en klasse Figurarkiv etter følgende mønster:
public class Figurarkiv { private Figur[] figurer; private int nesteLedige; public void settInn(Figur f) { ... } public void vis(Graphics g) { ... } // Flere metoder }
Tegneflaten
Selve tegneflaten kan lages ved å subklasse JPanel. Den kan få en peker til figurarkivet, og må deklarere metoden paintComponent. Når tegneflaten trenger å oppdateres, f.eks. når brukeren har lagt til en ny figur, sørger kall på repaint for å utføre denne metoden. Alt den skal gjøre er å be figurarkivet om å "tegne seg ut". Vi tar med en ganske komplett utgave av denne klassen:
public class Tegneflate extends JPanel { private Figurarkiv arkiv; public Tegneflate(Figurarkiv arkiv) { super(true); this.arkiv = arkiv; } protected void paintComponent(Graphics g) { super.paintComponent(g); arkiv.vis(g); } }
Hovedprogrammet
Hovedprogrammet, som i løsningsforslaget heter Tegneprogram, kan være en subklasse av JFrame, og skal bygge opp brukergrensesnittet med tegneflate og andre komponenter. Brukeren bør f.eks. ha mulighet for å velge figurtype, og deretter lage selve figuren f.eks. ved å trekke ut et rektangel i tegneflaten.
Alle figurtypene kan opprettes ved å klikke i et startpunkt på skjermen, og angi "størrelsen" ved å trekke musepekeren bort fra startpunktet og så slippe museknappen igjen. For å få til det må man registrere muselyttere til tegneflaten. En enkel variant er å la hovedprogrammet være lytteren. Tips: Ta vare på koordinatene i mousePressed. I mouseReleased får man nok et koordinatpar, og de to til sammen vil definere figuren som brukeren trekker opp.