Как добавить несколько дочерних элементов в список в панель в Java FX

1

Я пытаюсь создать несколько объектов, а затем поместить их в свою сцену. Для этого я использую цикл для создания нового объекта на каждой итерации и вставки его в список.

//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);

Как добавить список объектов в мою панель?

Благодарю!

  • 2
    Не уверен, что я понимаю вопрос, но если я интерпретирую его так, как вы его заявили, вы просто сделаете playground.getChildren().addAll(particles); , (Для одного узла для меня имеет смысл использовать add : playground.getChildren().add(robot); )
  • 0
    Да .. это работает. Спасибо
Теги:
javafx

1 ответ

4
Лучший ответ

Когда вы добавляете только один узел, вы должны предпочесть метод add(...) над методом addAll(...):

playground.getChildren().add(robot);

ObservableList<Node> наследует метод addAll(Collection<Node>) из List<Node>. Так что вы можете просто сделать

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) заключается в том, что слушатели, зарегистрированные в списке children, будут уведомлены только один раз для addAll(...), но будут уведомлены один раз для каждого элемента, если вы добавите каждый элемент по одному. Таким образом, потенциально может быть повышение производительности с помощью addAll(...).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню