Hallo,
ich hab mich hier mal angemeldet um bei einer Aufgabe vll Hilfe zu bekommen. Es geht um eine Turtle-Aufgabe und in der Teilaufgabe soll ich eine kleine GUI entwickeln. Ich lad ma die genau aufgabenstellung hoch.
Sry für den langen Text ich hoff des geht trotzdem und hier mein Code bis jetzt:
Des hab ich mit Hilfe bis jetzt hinbekommen, aber da fehlt ja noch Zeug z.b bei der setProgram-Methode. Hab aber keine Ahnung wie ich des machen soll. Hoff ein paar Profis hier können mich unterstützen bin ein bisschen verzweifelt. VIELEN VIELEN DANK.
ich hab mich hier mal angemeldet um bei einer Aufgabe vll Hilfe zu bekommen. Es geht um eine Turtle-Aufgabe und in der Teilaufgabe soll ich eine kleine GUI entwickeln. Ich lad ma die genau aufgabenstellung hoch.
TurtleVisualizer
Um die Turtle-Grafiken anzeigen zu können, brauchen wir eine Klasse, die dazu in der Lage ist nicht nur einfache Befehle ausführen zu können, wie die TurtleTransformer, sondern ganze Programme. Schließlich soll das Resultat eines Programms auch angezeigt werden können.
Dazu bedienen wir uns der Bibliothek javax.swing um eine kleine GUI zu entwickeln, ohne jedoch tiefer in das Thema eindringen zu müssen. Die beiden wesentlichen Klassen, die wir benötigen ist zum einen javax.swing.JFrame, welche die Funktionalität ein Fenster darzustellen liefert. Die andere Klasse ist javax.swing.JPanel: Das ist ein allgemeiner grafischer Container, in den man Zeichnen kann. Diesen muss man nur in den JFrame einfügen. Ein JPanel verfügt über eine Methode paintComponent(Graphics g), die vom swing Framework Aufgerufen wird, wenn das JPanel konkret dargestellt werden soll. Ein normales JPanel tut dabei nicht viel, wir werden aber eine Subklasse von JPanel erstellen, die diese Methode überschreibt.
Die Java-Swing-Klassen sind sehr gut dokumentiert. Bitte denken Sie daran und lesen Sie die entsprechende API, falls Sie auf Fragen und Probleme stoßen!
Dazu entwickeln Sie bitte die Klasse TurtleVisualizer, die javax.swing.JPanel erweitert. Die Klasse hat mindestens die folgenden Felder:
protected Turtle startTurtle;
protected TurtleTransformer transformer;
protected String turtleProgram;
Die Klasse hat den folgenden Konstruktor:
public TurtleVisualizer(Turtle startTurtle, int sizeX, int sizeY, String program, TurtleTransformer t)
Die Argumente sizeX und sizeY sollen dabei die Größe des Zeichenbereichs, also des Bereichs, in dem die Turtle sich bewegt, bestimmen. Diese Argumente bestimmen auch die Größe in Pixel mit der der TurtleVisualizer in einer GUI angezeigt wird. Eine IllegalArgumentException soll geworfen werden, falls einer der Parameter auf null gesetzt ist.
Mit der folgenden Methode kann dem TurtleVisualizer ein neues Programm zugewiesen werden. Eine IllegalArgumentException soll geworfen werden, falls der Parameter auf null gesetzt ist.
public void setProgram(String p)
Die Methode paintComponent von JPanel soll überschrieben werden. Es handelt sich dabei um eine callback-methode, die von der Grafikkomponente aufgerufen wird, in die der TurtleVisualizer eingebettet ist, wenn sie gezeichnet werden soll. Zum Zeichnen der Turtle-Grafik, benutzen Sie bitte die Methoden der Klasse Graphics. Eine Instanz dieser Klasse wird paintComponent als Argument übergeben.
protected void paintComponent(Graphics g)
Diese Methode wird also aufgerufen, wenn das Bild, das die Turtle produziert, gezeichnet werden soll. Dazu muss beginnend bei der durch den startTurtle gegebenen Position das turtleProgramm komplett durchlaufen werden und entsprechende Linien gezeichnet werden. Das von der Turtle produzierte Bild soll dabei stets exakt mittig im Zeichenbereich abgebildet erscheinen. Es macht nichts, wenn die Zeichnung über den Rand des dargestellten Bereichs hinausgeht. Benutzen Sie die durch das gegebene Graphics-Objekt vorgegebene Zeichenfarbe. Verändern Sie die Hintergrundfarbe nicht. Skalieren Sie die Grafik so, dass die Turtlekoordinaten 1-zu-1 in das Koordinatensystem des Graphics-Objects umgesetzt werden (mit anderen Worten: Ändern Sie nichts an der Skalierung).
Sry für den langen Text ich hoff des geht trotzdem und hier mein Code bis jetzt:
Java:
package jpp.turtlegraphics;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JPanel;
public class TurtleVisualizer extends JPanel {
protected Turtle startTurtle;
protected TurtleTransformer transformer;
protected String turtleProgram;
protected int sizeX;
protected int sizeY;
public TurtleVisualizer(Turtle startTurtle, int sizeX, int sizeY, String program, TurtleTransformer t)
throws IllegalArgumentException {
if (sizeX == 0 || sizeY == 0)
throw new IllegalArgumentException();
this.startTurtle = startTurtle;
this.sizeX = sizeX;
this.sizeY = sizeY;
this.turtleProgram = program;
this.transformer = t;
this.setPreferredSize(new Dimension(sizeX, sizeY));
}
public void setProgram(String p) throws IllegalArgumentException{
if (p == null)
throw new IllegalArgumentException();
}
protected void paintComponent(Graphics g){
for(int i=0;i<=turtleProgram.length()-1;i++){
turtleProgram.charAt(i)
}
}
}
Des hab ich mit Hilfe bis jetzt hinbekommen, aber da fehlt ja noch Zeug z.b bei der setProgram-Methode. Hab aber keine Ahnung wie ich des machen soll. Hoff ein paar Profis hier können mich unterstützen bin ein bisschen verzweifelt. VIELEN VIELEN DANK.
Zuletzt bearbeitet: