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:

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.