如何将列表中的多个子项添加到Javafx中的窗格中

时间:2015-03-23 01:06:46

标签: java javafx

我正在尝试创建多个对象,然后将它们放入我的场景中。为此,我使用循环在每次迭代中创建新对象并将其插入到列表中。

//single object
robot = new Circle(25, Color.BLUE);
robot.relocate(getRandomCoordinates(600), getRandomCoordinates(400));

ArrayList<Circle> particles = new ArrayList<Circle>();

//multiple objects in list particles
for(int i = 0; i < 10; i++)
{
  particles.add(new Circle(10, Color.GREEN));
}

现在主要问题是如何将对象列表插入到我的窗格中。对于我使用的单个对象:

playground.getChildren().addAll(robot);

如何将对象列表添加到我的Pane - playground?

谢谢!

1 个答案:

答案 0 :(得分:4)

如果只添加单个节点,则应优先采用add(...)方法而不是addAll(...)方法:

playground.getChildren().add(robot);

ObservableList<Node>继承了List<Node>的{​​{3}}方法。所以你可以做到

playground.getChildren().addAll(particles);

请注意,第二种方法称为addAll(...),它是一种varargs方法,采用Node参数列表。这特定于ObservableList(不仅仅是List)。

当然,您也可以一次添加一个元素:

for (Node node : particles) {
    playground.getChildren().add(node);
}

或者,如果您更喜欢Java 8方法:

particles.forEach(playground.getChildren()::add);

此方法与使用addAll(particles)之间的区别在于,使用子列表注册的侦听器将仅针对addAll(...)通知一次,但如果您在每个元素添加一个元素,则会通知每个元素一次一时间因此,使用addAll(...)可能会提高性能。