java - setter 似乎无法在主方法中工作

标签 java swing jframe

我在使用主类中具有 JFrame“位置”的 setter 方法时遇到问题。 JFrame 的 Activity 部分(称为“海龟”移动的三角形)正在离开 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方法的Turtle类:

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

任何帮助将不胜感激。先感谢您。

最佳答案

笛卡尔坐标类中的“ setter ”实际上不执行任何操作,因为它们只是分配给未读取的成员变量。

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

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

尝试这些来更新要读取的坐标:

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

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

关于java - setter 似乎无法在主方法中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37175163/

相关文章:

java - 如何组织国际化的 Java 属性条目?

java - 构建 Eclipse RCP 应用程序以在 GUI 和 headless 模式下运行

java - 更改 JPA 生成的表列的数据类型

java - 通过 JTextField 快速搜索 JTable 中的批量数据

java - 根据另一个 JComboBox 的选择更改 JComboBox 的元素

java - 从资源中的图像设置图标图像

java - JPA 和 Derby 性能

java - 如何禁用桌面应用程序中的菜单项?

Java - 如何检查 JFrame 是否关闭

java - 如何检查表是否是在Jtable和JFrame中制作的