実際に画面を表示する前にAccordian
の要素にアクセスしようとしていますが、アクセスするたびに子要素がありません。私がステージに行ったら、子供たちが現れます。私はSceneBuilderでこのシーンを構築しました。そして、すべてのコンポーネントが画面に表示されたら、期待どおりに動作します。JavaFx - 要素の作成時期
FXMLLoader
を使用して構造全体がロードされます。プロジェクトのサイズ(30k +コード行)のためにコードを投稿できません。 FXMLLoader
が実行されていることを確認しました。Parent
のすべての最上位要素が指定されています。 (ステージをロードする前に要素にアクセスしようとするまで意図した通りに動作します)
アプリケーションのさまざまな段階すべてで呼び出すように試みましたが、ロードを完全に強制するように努力しましたが、結果。
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は、私がgetTabs().get(n).getContent()
を使用することができていますし、期待通りに子どもと一緒のタブを取得する構造は、この場合TabPane
に(要素の上に構築された事実であることが明らかになったが、で。実行中のこの時間は、私はまだTabPane
に子がないことを取得します。ステージが表示された後まで、それは子供を持っていません。
説明をありがとう! – Chris