Java AWT: Feld an Frame übergeben + zeichnen

Lucky Luke

Ensign
Registriert
März 2005
Beiträge
129
Grüße an die Gemeinde!

Ich bin gerade dabei, mir Java selbst beizubringen. Von einem befreundeten Informatikstudenten bekommen ich immer die Übungsserien, die er an der Uni machen sollte. Der erste Teil bestand darin, eine abstrakte Klasse GeoObj anzulegen. Wie der Name schon sagt, beinhaltet die Klasse Methodennamen wie die Berechnung von Fläche und Umfang von geometrischen Objekten:
http://home.arcor.de/vwunkx23/blatt4/src/html/GeoObj.html

Von dieser Basisklasse erbten dann die Klassen Rechteck, Quadrat und Kreis:
http://home.arcor.de/vwunkx23/blatt4/src/html/Rechteck.html
http://home.arcor.de/vwunkx23/blatt4/src/html/Quadrat.html
http://home.arcor.de/vwunkx23/blatt4/src/html/Kreis.html

Mittels Konstruktor konnte man dann beispielsweise ein Rechteck ganz komfortabel vorinitialisieren. Als Punkt im Koordinatensystem nehmen wir einfach mal P(1;2), die Seitenlänge a ( in x-Richtung) ist mal 4LE und die Seitenlänge b sind 7LE
Code:
GeoObj o;
Rechteck a = new Rechteck (2,new Punkt(1,2),4,7);

o = a;
o.getArea(); //Berechnung der Flächeninhalts
o.getBigness(); //Berechnung des Umfangs
Wundert euch nicht über die "2" am Anfang innerhalbt der Klammer. Das soll irgendeine ID sein. Die brauche ich aber erst in einer der nächsten Übungsserien.

So nun sollte ich ein Programm entwerfen, das bebliebig viele geometrische Objekte anlegt und bearbeitet. Ganz klar kommt da ein Feld von GeoObj in Frage:
Code:
GeoObj objects[] = new GeoObj[100];;

objects[0] = new Kreis (1,new Punkt (0,0),3);
// allgemein:new Kreis(1,new Punkt(x,y),radius);

objects[1] = new Rechteck (2, new Punkt(1,2),4,7);
// allgemein: new Rechteck (2,new Punkt(x,y),a,b);

objects[2] = new Quadrat(3,new Punkt(2,4),1);
// algemein: new Quadrat(3,new Punkt(x,y),a);

Nun soll ich die eingegebenen geometrischen Objekte, ich entschuldige mich für den schlechten Ausdruck, an ein Fenster übergeben, das alle Objekte darstellt. Für die Umsetzung muss ich ja sicherlich nur das array von GeoObj an einen Frame übergeben, der es dann für mich ausgibt.
Code:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package blatt4;
import java.awt.*;
import java.awt.event.*;


public class Frametest extends Frame 
{       
  public Frametest () 
  {               
    setTitle("Beispiel"); 
    addWindowListener(new TestWindowListener());
   
    add(new DrawingPanel());
         
    setSize(500,500);
    setVisible(true);                           
  }

  class DrawingPanel extends Panel
  {
    public void paint(Graphics g)
    {
      g.setColor(Color.GREEN);
      g.drawRect(100, 10, 50, 50);
      g.setColor(Color.RED);
      g.drawOval(300, 10, 50, 50);
      g.drawLine(10, 10, 10, 460);
      g.drawLine(10, 460, 480, 460);
               
    }
  }  
 
  class TestWindowListener extends WindowAdapter
  {
    public void windowClosing(WindowEvent e)
    {
      e.getWindow().dispose();                  
      System.exit(0);                            
    }           
  }
 public static void main (String args[]) 
  {
    new Frametest ();
  }
}
Hier habe ich mal ein bissel mit AWT rumexperimentiert, und den ein- oder anderen Befehl ausprobiert.

Wie kann ich jetzt das array von geometrischen Objekten an den Frame weitergeben? Es wäre ja sicherlich am besten wenn man der paint-Methode das Feld übergeben könnte. Allerdings erwartet diese Methode ja immer ein Objektinstanz von der Klasse Graphics...Wie gesagt, bin gerade etwas überfragt. Mir fehlt auch einfach noch eine Menge Wissen in Bezug auf AWT.

So, ich freue mich für jeden konstruktiven Beitrag!


Mfg Lucky
 
Sofern du in Eclipse den die Häkchen beim Content Assist richtig gesetzt hast
 
Also, ich würde in der class DrawingPanel noch ein Array oder eine ArrayList für die geometrischen Objekte anlegen. Getter und Setter dazu. Und die paint-Methode von DrawinPanel (hoffe, dass das die Klasse ist, in der die Änderungen laut Aufgabenstellung rein sollten) würde dieses Array oder besser: die ArrayList Elementweise durchgehen und die geometrischen Objekte in seinem Kontext ausgeben.

Über die Setter und Getter übergibt man dann ganz Geoobj-Arrays. Sinnvoll wäre vielleicht noch Methoden wie: AddGeoObj(GeoObj geo) und RemoveGeoObjAt(int index) (jedoch wäre hier eine ArrayList sinnvoll)

Hoffe, dass das in die richtige Richtung geht?
 
Zurück
Oben