我一直在忙着练习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一般都是新手,所以如果还有其他任何问题,我的代码可以随意纠正。谢谢!
答案 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) );