sind, nun ja, Objekte halt. Sie werden mit Hilfe der Klasse erstellt. Wird eine Klasse Dreieck definiert, so kann man an Hand dieser Klasse beliebig viele Objekte konstruieren. So ähnlich, wie man an Hand eines Backrezeptes beliebig viele Kuchen erstellen kann. Hat die Klasse einen Namen, so braucht man nur noch einen Namen für das Objekt, das man erstellen möchte.
Eine Klasse dreieck
sei nun gegeben.
d1
soll erstellt werden. Dafür wird zunächst diesem Namen die Klasse (als eine Art Datentyp) Dreieck
zugewiesen. Genauer ist dieser Name nun ein Verweis auf einen Speicherbereich, an dem ein Objekt dieser Klasse gespeichert wird. Dreieck d1;
new Dreieck (parameter1, parameter2, ...);
d1 =
Die letzten beiden Punkte lassen sich in Java aber nicht trennen. Die ausführliche Variante lautet daher insgesamt:
Dreieck d1; d1 = new Dreieck (parameter1, parameter2, ...);
Die abgekürzte Variante lautet:
Dreieck d1 = new Dreieck (parameter1, parameter2, ...);
Dann kann mit Hilfe des Verweises das neue Objekt verwendet werden.
Dreieck d2 = d1;
existiert nicht noch ein Objekt der Klasse Dreieck
, sondern lediglich ein zweiter Verweis auf dasselbe Dreieck, sodass sowohl mit d1
als auch mit d2
dasselbe Objekt bearbeitet wird. Man beachte: Tatsächlich dasselbe, nicht nur das Gleiche!
Hier fehlen noch einige Übungen zum einfachen Zeichnen mit drawLine()
…
Danach kann man schöne Dinge mit einer Schildkröte oder einem Igel machen. Die Schildkröte sieht dann so aus:
package Zeichnen; import java.awt.Graphics; /** * * @author euteneuer */ public class Schildkröte { double winkel; double bogenmaß=0; double x, y; Graphics g; public Schildkröte (double x, double y, double winkel, Graphics g) { this.x = x; this.y = y; this.winkel = winkel; this.g = g; this.bogenmaß=Math.PI * 2 * this.winkel / 360; } public void setX (double x) { this.x = x; } public void setY (double y) { this.y = y; } public void setWinkel (double winkel) { this.winkel = winkel; this.bogenmaß=Math.PI * 2 * this.winkel / 360; } public void setRichtung (double x, double y) { this.bogenmaß=Math.atan2((this.y-y),-(this.x-x)); this.winkel = this.bogenmaß / 2 / Math.PI * 360; } public void gehe (double weite) { double dx = (double)(weite*Math.cos(bogenmaß)); double dy = -(double)(weite*Math.sin(bogenmaß)); double xNeu = x+dx; double yNeu = y+dy; g.drawLine((int)Math.round(x), (int)Math.round(y), (int)Math.round(xNeu), (int)Math.round(yNeu)); x = xNeu; y = yNeu; } public void dreheLinks (double winkel) { this.winkel += winkel+360; this.winkel = this.winkel % 360; bogenmaß = Math.PI * this.winkel / 360 * 2; } public void dreheRechts (double winkel) { this.winkel -= winkel+360; this.winkel = this.winkel % 360; bogenmaß =Math.PI * this.winkel / 360 * 2; } public double getX () { return (x); } public double getY () { return (y); } public double getWinkel () { return (winkel); } public Graphics getGraphics () { return (g); } }
Um die Schildkröte zu benutzen sind nur wenige Voraussetzungen nötig:
jpanel
namens pZeichenbrett
.jButton
namens bZeichne
mit ActionListener
.
Dann kann's schon losgehen. Folgende Methode zeichnet beispielsweise ein Quadrat. Dabei startet fabian
im Punkt (200|200) (Ursprung links oben!) und sieht nach rechts.
private void bZeichneActionPerformed(java.awt.event.ActionEvent evt) { Schildkröte fabian; fabian = new Schildkröte (200 , 200 , 90 , pZeichenbrett.getGraphics()); for (int i=1; i<=4; i++) { fabian.gehe(30); fabian.dreheLinks(90); } }