2016-03-19 107 views
0

我想创建一个动态对象,例如JavaFX中的一个圆。我的代码会这样。动态创建对象并将其添加到列表中JavaFX

List<Node> list = new ArrayList<>(); 

    // Create circle dynamically 
    for(int i = 0; i < 10; i++) { 
     list.add(new Circle()); 
    } 

我现在的问题是如何添加每个圆的唯一性。例如,如果我要添加每个圆圈的不同颜色和大小。我怎样才能实现它?请帮忙。

+0

在半径的循环中使用Math.random,您可以获得具有多个半径的各种圆,并将其添加到arraylist – SmashCode

回答

1

RANDOM:这一切都归结到你想怎么改变他们,如果你想每圈有随机属性,然后进行组合使用Math.rand()方法与圆的方法/构造函数,例如:

for(int i = 0; i < 10; i++){ 
    Circle circle = new Circle(Math.rand() * 600, Math.rand() * 400, Math.rand() * 30 + 20); 
    list.add(circle); 
    switch((int)(Math.rand() * 4)){ 
    case 0: 
     circle.setFill(Color.GREEN); 
     break; 
    case 1: 
     circle.setFill(Color.RED); 
     break; 
    case 2: 
     circle.setFill(Color.BLUE); 
     break; 
    case 3: 
     circle.setFill(Color.YELLOW); 
     break; 
    } 
} 

以这种方式,位置,半径和颜色都是随机的。您可以随时更改我自然使用的值,在此示例中,球的大小从20-49不等,从0-599宽度和0-399高度不等。 4种不同的颜色是随机的。

非随机: 但是,如果要为每一个圆具体设定值,你总是可以单独使用list.get(int index)访问圈子访问它们。您还必须将列表元素转换为Circle类型才能使用特定于圆的方法。以下是一个示例:

((Circle)list.get(0)).setRadius(45.3); 
((Circle)list.get(1)).setFill(Color.ORANGE); 
((Circle)list.get(09).setCenterX(392); 

但是,您必须亲自确定列表中的元素是使用这种方法的圆圈。你的例子提供了这个,但是如果你制作一个更大的程序,并且该列表包含除Circle之外的其他节点,则可能难以具有相同的控制级别。如果该列表仅用于圈子,则最好将它改为List<Circle>类型。

+0

谢谢我会试试看。 –

1

为什么不在for循环中创建一个新的Circle实例,根据自己的喜好修改它,然后将其添加到列表中?

List<Node> list = new ArrayList<>(); 

// Create circle dynamically 
for(int i = 0; i < 10; i++) { 
    Circle newCircle = new Circle(); 
    newCircle.setSize(i*2); //Just an example 
    list.add(newCircle); 
} 
+0

谢谢我会尝试一下。 –

相关问题