[Java] AWT: Feld an Frame übergeben + zeichnen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Lucky009, 21. Juli 2008 .

  1. 21. Juli 2008
    AWT: Feld an Frame übergeben + zeichnen

    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! BW gibts natürlich auch...


    Mfg Lucky
     
  2. 28. Juli 2008
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    AW: AWT: Feld an Frame übergeben + zeichnen

    habs mal schnell ausgecoded, ginge vl noch schöner/kürzer, hab aber schon längere zeit nix mehr programmiert.

    ich habs jetzt so gelöst:

    in der GeoObj eine abstrakte methode paint, mit parameter Graphics g
    die methode dann in allen subklassen implementieren (zb mit g.drawOval(x,y...) usw)

    beim zeichnen dann im drawingpanel einfach ne schleife übers object array laufen lassen


    Download: 2.jpg | xup.in

    beim fragen, meld dich!

    lg
     
  3. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.