Я пытаюсь получить доступ к элементам Accordian
перед фактическим просмотром экрана, но каждый раз, когда я обращаюсь к нему, у него нет детей. Как только я побывал на сцене, появляются дети. Я создал эту сцену в SceneBuilder, и она работает, как и ожидалось, когда все компоненты будут видны на экране.JavaFx - Когда создаются элементы
Вся структура загружается с использованием FXMLLoader
. Я не могу опубликовать код из-за размера проекта (30k + строк кода). Я проверил, что работает FXMLLoader
, и я получаю все элементы верхнего уровня в указанном Parent
. (Работает до тех пор, пока я не попытаюсь получить доступ к элементам перед загрузкой сцены)
Я попытался позвонить start(stage)
на всех этапах приложения, чтобы заставить их полностью загрузиться, но у меня все же есть тот же Результаты.
Вот код для получения всех детей Node
, который отлично работает после того, как сцена была видна на экране, пока не будут найдены только предметы верхнего уровня, и у всех их есть 0 детей.
public static ObservableList<Node> getAllChildren(Node n) {
ObservableList<Node> allChildren = FXCollections.observableArrayList();
ObservableList<Node> children = ((Parent) n).getChildrenUnmodifiable();
for (Node c : children) {
if (c instanceof Parent) {
ObservableList<Node> cp = ((Parent) c).getChildrenUnmodifiable();
if (cp.size() > 0) { // 0 for all top-level Parents until the stage has been visually loaded.
ObservableList<Node> nodes = getAllChildren(c);
for (Node node : nodes) {
allChildren.add(node);
}
}
}
allChildren.add(c);
}
return allChildren;
}
EDIT: Далее testign показывает, что структура фактически построен на элементах (в этом случае TabPane
, я могу использовать getTabs().get(n).getContent()
и получите вкладки со своими детьми, как и ожидалось, однако, в. на этот раз в исполнении, я все еще получаю, что TabPane
не имеет детей. Он не имеет детей, пока не будет отображаться на сцене.
Спасибо за разъяснения! – Chris