2016-03-07 69 views
0

我一直在用javafx进行练习,碰到一些我无法弄清楚的东西。我想将不同数量的矩形放入数组列表中。现在,而不是那个,我将每个矩形存储为各种属性的双数组(double []),然后将基矩形设置为这些值并返回。在javafx的阵列列表中创建和存储不同数量的图形

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,然后返回该矩形。这工作,但我想知道是否有一种方法来在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)); 
+0

谢谢!我只知道使用这个:Rectangle ______ = new Rectangle(); –