2016-05-12 4 views
0

JFrameの "位置"を持つメインクラスのセッターメソッドを使用するのに問題があります。 JFrameのアクティブな部分(「カメ」と呼ばれる三角形)はJFrameを離れています。このとき座標を変更する現在の方法は機能しません。私が何日間も立ち往生していたので、どんな助けも大歓迎です。メインメソッドでセッターが機能していないようです

wrapPositionのメソッドは、(800x600)ピクセルの「画面」から外れている場合に座標を変更するように設計されています。このチェックはループしているので、タートルは決してスクリーンから外れません。ここ

はメインクラスです:

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); 
     } 
    } 
} 

面倒wrapPosition方法でタートルクラス:

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); 
    }  
} 

また、それは任意のヘルプ座標クラスである場合:

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; 
    } 
} 

ご協力いただければ幸いです。前もって感謝します。

答えて

1

クラスCartesianCoordinateの「セッター」は、読み込まれていないメンバー変数に代入するだけなので、ほとんど何も行いません。

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

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

読み込むべき座標が更新される持っている代わりに、これらを試してみてください:SO MUCH

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

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

ありがとう!!!!!!!!!!!はい!!!!!!!! –

+0

問題の解決に役立つ場合は、[受け入れてください](http://meta.stackexchange.com/a/5235/155831)してください。 –

関連する問題