Ich bin gerade auf dieses Forum gestossen, und bin auf die Hilfe angewiesen.
Ich bin JAVA Neuling und erlerne gerade die Sprache indem ich ein Draw-Programm schreibe.
Nun habe ich eine Klasse mit einem Swing Gui erstellt, funktioniert einwandfrei. Eine Klasse Vektor in der x,y abgelegt ist.
Dazu eine Klasse FreiHand.java darin habe die Methoden für das Freihandzeichnen.
Wenn ich aber nun versuche zu zeichnen, bekomme ich die Linien für Freihand nicht hintereinander sondern immer vom gleichen Ursprung aus. Ich kann den Fehler im Code aber nicht erkennen.
Kann mir hier jemand weiterhelfen?
Code von FreiHand.java
Java:
importjava.awt.Graphics;importjava.util.ArrayList;publicclassFreiHandextendsVector{privateArrayList<Integer> x =newArrayList<Integer>();privateArrayList<Integer> y =newArrayList<Integer>();publicFreiHand(Integer x,Integer y){super(x,y);// erbt von Vector Parameter im Basiskonstruktur übernehmen}publicvoidaddPoint(Integer x,Integer y){this.x.add(x);this.y.add(y);}publicvoidPaint(Graphics g){int prevX =this.GetX();int prevY =this.GetY();for(Integer i =0; i < x.size(); i++){
g.drawLine(prevX,prevY,x.get(i),y.get(i));}}}
Wo sind denn die Methoden GetX u. GetY? Vermutlich in der Superklasse. Da du diese Methoden nie überschreibst werden sie auch nur das gleiche tun wie die Superklasse.
Außerdem: In welchem Package ist denn diese Vector-Klasse?
Wo sind denn die Methoden GetX u. GetY? Vermutlich in der Superklasse. Da du diese Methoden nie überschreibst werden sie auch nur das gleiche tun wie die Superklasse.
Außerdem: In welchem Package ist denn diese Vector-Klasse?
Die getX und getY Methoden sind in der Vektor Klasse. Die Klassen Gui.java, Vector.java, Freihand.java
sollten meines Erachtens alle im gleichen Paket sein.
Ah, ich seh schon den Fehler: du vergisst die letzten Punkte neu zu setzen.
Java:
publicvoidPaint(Graphics g){int prevX =GetX();int prevY =GetY();for(Integer i =0; i < x.size(); i++){
g.drawLine(prevX,prevY,x.get(i),y.get(i));// folgende 2 Zeilen fehlen bei dir!
prevX = x.get(i);
prevY = y.get(i);}}
Anmerkung:
this brauchst du nicht. Stört IMO nur den Lesefluss. Also dort wo du es nicht brauchst, kannst du es getrost weglassen. Außerdem Methodennamen sollten immer klein anfangen. Siehe auch Java Code Conventions
Ah, ich seh schon den Fehler: du vergisst die letzten Punkte neu zu setzen.
Anmerkung:
this brauchst du nicht. Stört IMO nur den Lesefluss. Also dort wo du es nicht brauchst, kannst du es getrost weglassen. Außerdem Methodennamen sollten immer klein Anfangen. Siehe auch Java Code Conventions