在 javafx 的数组列表中创建和存储不同数量的形状
Creating and storing a varying number of shapes in an arraylist in javafx
我一直在使用 javafx 进行练习,运行 解决了一些我无法理解的问题。我想将不同数量的矩形放入数组列表中。现在,我不是那样,而是将每个矩形存储为各种属性的双精度数组 (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 时,它会设置基本矩形的 x 和 y,然后 returns 该矩形。这行得通,但我想知道是否有办法在 ArrayList 中存储多个 Rectangle 实例。我看到这样做的主要问题是您必须命名实例(在上面的示例中为 myRectangle)。我想如果有办法解决这个问题,那就是根据字符串命名实例,换句话说:
Rectangle "myRectangle" = new Rectangle();
据我所知这是不可能的。
总的来说,我对 Javafx 和 Java 还很陌生,所以如果我的代码有任何其他问题,请随时更正。谢谢!
您只需要制作一个 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) );
我一直在使用 javafx 进行练习,运行 解决了一些我无法理解的问题。我想将不同数量的矩形放入数组列表中。现在,我不是那样,而是将每个矩形存储为各种属性的双精度数组 (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 时,它会设置基本矩形的 x 和 y,然后 returns 该矩形。这行得通,但我想知道是否有办法在 ArrayList 中存储多个 Rectangle 实例。我看到这样做的主要问题是您必须命名实例(在上面的示例中为 myRectangle)。我想如果有办法解决这个问题,那就是根据字符串命名实例,换句话说:
Rectangle "myRectangle" = new Rectangle();
据我所知这是不可能的。
总的来说,我对 Javafx 和 Java 还很陌生,所以如果我的代码有任何其他问题,请随时更正。谢谢!
您只需要制作一个 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) );