2016-05-12 7 views
0

Ich habe Probleme mit Setter-Methoden aus der Hauptklasse mit einem JFrame "Position". Die aktiven Teile des JFrame (Dreiecke, die sich "Schildkröten" nennen) verlassen den JFrame und meine derzeitige Methode, die Koordinaten zu ändern, wenn dies geschieht, funktioniert nicht. Jede Hilfe würde sehr geschätzt werden, da ich seit Tagen feststecke.Setter scheint nicht in der Hauptmethode zu arbeiten

Die Methode wrapPosition wurde entwickelt, um die Koordinaten zu ändern, wenn sie nicht auf dem "Bildschirm" (800x600) Pixel stehen. Diese Überprüfung ist in der Schleife, so dass eine Schildkröte nie vom Bildschirm verschwindet.

hier ist die Hauptklasse:

import javax.swing.*; 
import java.awt.*; 
import java.util.ArrayList; 

class Lab7b 
{ 

    public static void main(String [ ] args) 
    { 
     int deltaTime = 50; 
     JFrame frame = new JFrame(); 
     Canvas canvas = new Canvas();      
     frame.setTitle("Welcome to turtle land!"); 
     frame.setSize(800, 600); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
     frame.setVisible(true); 
     frame.add(canvas);    

     ArrayList<DynamicTurtle> turtles = new ArrayList<DynamicTurtle>(); //An ArrayList containing Turtle elemenets 

       turtles.add(new RandomTurtleA(turtleCanvas, 400, 300)); 
     turtles.add(new RandomTurtleA(turtleCanvas, 400, 300)); 
     turtles.add(new RandomTurtleA(turtleCanvas, 400, 300));    

     while(true) 
     { 
      for (int i = 0; i < turtles.size(); i++) 
      { 
       (turtles.get(i)).unDrawTurtle(); 
       hello.setText("X: " + (turtles.get(i)).getPositionX() + " Y: " + (turtles.get(i)).getPositionY()); //print to JFRAME 
       System.out.println("X: " + (turtles.get(i)).getPositionX() + " Y: " + (turtles.get(i)).getPositionY()); //print to CMD 

       (turtles.get(i)).wrapPosition((turtles.get(i)).getPositionX(), (turtles.get(i)).getPositionY()); //this is the wrapPosition method that does not work 
      } 

      for (int i = 0; i < turtles.size(); i++) 
      { 
       (turtles.get(i)).update(1000); 
      } 

      for (int i = 0; i < turtles.size(); i++) 
      { 
       (turtles.get(i)).drawTurtle();    
      } 

     Utils.pause(deltaTime/2); 
     } 
    } 
} 

die Schildkröte-Klasse mit der lästigen wrapPosition Methode:

class Turtle 
{ 
    protected Canvas canvas; // private field reference to a canvas private   
    private CartesianCoordinate myLocation, oldLocation; 
    private boolean penDown = true; 
    private double Angle, maxX, maxY, x, y; 
    public double d, e, first, second; 


    public Turtle(Canvas canvas, CartesianCoordinate initLocation) 
    { 
     this.canvas = canvas; 
     this.myLocation = new CartesianCoordinate(0,0); 
     Angle = 0; 
     penDown = true; 
     myLocation = initLocation.copy();   
    } 

    public void wrapPosition(double x, double y) 
    { 
     this.x = maxX; 
     this.y = maxY; 

     if(maxX < 0) 
     { 
      this.setPositionX(800); 
     } 

     if(maxX > 800) 
     { 
      this.setPositionX(0); 
     } 

     if(maxY < 0) 
     { 
      this.setPositionY(600); 
     } 

     if(maxY > 600) 
     { 
      this.setPositionY(0); 
     }   
    } 


    public double getPositionX() 
    { 
     double getPosX; 
     getPosX = myLocation.getX(); 
     return getPosX; 
    } 

    public double getPositionY() 
    { 
     double getPosY; 
     getPosY = myLocation.getY(); 
     return getPosY; 
    } 

    public void setPositionX(double x) 
    { 
     myLocation.setX(x); 
    } 

    public void setPositionY(double y) 
    {   
     myLocation.setY(y); 
    }  
} 

Auch, wenn es irgendwelche helfen, die Koordinatenklasse:

class CartesianCoordinate 
{ 
    private double xPosition, yPosition, setterX, setterY; 

    public CartesianCoordinate(double x, double y) 
    { 
     this.xPosition = x; 
     this.yPosition = y; 
    } 

    public double getX() 
    { 
     return this.xPosition; 
    } 

    public double getY() 
    { 
     return this.yPosition; 
    } 

    public void setX(double setterX) 
    { 
     this.setterX = xPosition; 
    } 

    public void setY(double setterY) 
    { 
     this.setterY = yPosition; 
    } 
} 

Jede Hilfe würde sehr geschätzt werden. Vielen Dank im Voraus.

Antwort

1

Die "Setter" in der Klasse CartesianCoordinate machen praktisch nichts, weil sie nur Membervariablen zuweisen, die nicht gelesen werden.

public void setX(double setterX) 
{ 
    this.xPosition= setterX; 
} 

public void setY(double setterY) 
{ 
    this.yPosition= setterY; 
} 
+0

THANKYOU SO VIEL !!!!!!!!!!!:

public void setX(double setterX) { this.setterX = xPosition; } public void setY(double setterY) { this.setterY = yPosition; } 

diese Versuchen Sie stattdessen Koordinaten müssen aktualisiert werden, werden gelesen JA!!!!!!!! –

+0

Bitte [akzeptieren Sie die Antwort] (http://meta.stackexchange.com/a/5235/155831), wenn dies zur Lösung des Problems beigetragen hat. –