Listenartige Speicherung verschiedener Objekte

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo,
ich habe folgendes Problem:

Ich besitzte 4 Klassen.

Rechteck, Oval, Model und DrawingPanel.

Rechteck und Oval sind 2 Objektklassen in denen ich informationen über die Position, Größe speichere und eine Methode zum zeichnen dieses Rechteckes bereitstelle(paint()).

Model soll die erzeugenden Rechtecke und Ovale irgendwie speichern und verwalten können. Löschen von einzelnen Objekte und neue Hinzufügen.

DrawingPanel bekommt beim erzeugen das Model mitgeliefert, dieses DrawingPanel soll nun, alle Objekte aus dem Model auslesen und diese dann mithilfe der funktion paint() der einzelnen Objekte(Rechteck oder Oval) zeichnen.

Mein Problem liegt nun bei der Objektspeicherung im Model. Ich habe versucht mit einer ArrayList die Objekte zu speichern. und dem Model eine getArrayList() funktion zum zurückgeben der ArrayListe verpasst. Nun kann das DrawingPanel natürlich auf die ArrayListe zugreifen, aber mit "ArrayList.get(0).paint()" bekomme ich einen Fehler da der Complier nicht weiß welches Objekt(Rechteck oder Oval) hinter der 0 steht. Gibt es dafür was anderes als die ArrayList? Oder hat sonstjemand eine Idee wie das zu realisieren ist?

Vielen Dank für die Hilfe schonmal!

Mit freundlichen Grüßen
Najjannnaj
 
Bau dir ein Interface welches die paint Methode beinhaltet. Lass beide Klassen das Interface implementiere und setz die ArrayList auf den Typ des Interface oder caste dir die Objekte auf das Interface:

So z.B.
Code:
public interface Paintable{
  public void paint(Graphics g);
}

public class Oval implements Paintable{

//irgendwelche Methoden und Attribute für Größe und Position....

  //Methode paint des Interface implementieren
  public void paint(Graphics g){
    //
  }

}

//die ArrayList solltest du so erzeugen:

List<Paintable> list = new ArrayList<Paintable>();

//und irgendwo willst du dann alles Zeichnen:

public void paint(Graphics g){
  for(Paintable p : model.getArrayList()){
    p.paint(g);
  }
}
 
Deine Oval- und Rechteck-Klassen müssen einen gemeinsamen Typ haben, also z.B. eine Oberklasse, von der sie abgeleitet sind oder eine Schnittstelle, die beide implementieren:

Code:
public interface Drawable {
   public void draw();
}

public class Oval implements Drawable { 
 ...
    public void draw() { ... }
}
public class Rechteck implements Drawable {
 ...
    public void draw() { ... }
}

Für die Liste benutzt du dann Generics:
Code:
List<Drawable> list = new ArrayList<Drawable>();
Danach kannst du die Liste ganz einfach abarbeiten und auf alle
Objekte draw() aufrufen.
 
Echt lustig, die selbe Lösung innerhalb weniger Minuten gepostet 🙂
Wir haben einfach Skillzzzz :lol:
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben