在javafx中

时间:2016-03-07 17:46:41

标签: java class arraylist javafx instance

我一直在忙着练习javafx并遇到了一些我无法弄清楚的事情。我想把不同数量的矩形放入一个arraylist。现在,而不是那样,我将每个矩形存储为各种属性的双数组(double []),然后将基本矩形设置为这些值并返回。

public class example{
    Rectangle myRectangle = new Rectangle(0,0,25,25);
    ArrayList<double[]> rectangles = new ArrayList();
    double[] tempArray = [0,0];
    public void addRect (double x, double y){
        this.tempArray[0] = x;
        this.tempArray[1] = y;
        this.rectangles.add(this.tempArray);
    };
    public Rectangle getRect (int id){
        this.myRectangle.setX(this.rectangles.get(id)[0]);
        this.myRectangle.setY(this.rectangles.get(id)[1]);
        return(this.rectangle);
    };
}

在这个例子中,当我调用getRect时,它设置基本rect的x和y,然后返回该rect。这有效,但我想知道是否有一种方法可以在ArrayList中存储多个Rectangle实例。我看到这样做的主要问题是你必须命名实例(在上面的例子中,myRectangle)。我想如果有解决这个问题的方法,那就是根据字符串命名实例,换句话说:

Rectangle "myRectangle" = new Rectangle();

这是不可能的,据我所知。

我对Javafx和Java一般都是新手,所以如果还有其他任何问题,我的代码可以随意纠正。谢谢!

1 个答案:

答案 0 :(得分:1)

你只需要制作一个ArrayList<Rectangle>并为其添加矩形。

public class Example {
    private List<Rectangle> rectangles = new ArrayList<>();

    public void addRectangle(double x, double y, double width, double height) {
        rectangles.add(new Rectangle(x, y, width, height));
    }

    public Rectangle getRectangle(int index) {
        return rectangles.get(index);
    }
}

您应该注意到您的原始代码根本没有按预期工作。例如,尝试:

// please do NOT name classes with lower case...
example e = new example();
e.addRectangle(0, 0);
e.addRectangle(100, 100);

Rectangle rect1 = e.getRectangle(0);
System.out.println("Rectangle 1: ["+rect1.getX()+", "+rect1.getY()+"]");
Rectangle rect2 = e.getRectangle(1);
System.out.println("Rectangle 2: ["+rect2.getX()+", "+rect2.getY()+"]");

// but:
System.out.println("Rectangle 1: ["+rect1.getX()+", "+rect1.getY()+"]");
// oops.

System.out.println("Rectangle 1 and 2 are the same: " + (rect1==rect2) );