當我試圖訪問實際觀看屏幕,但我每次訪問時間之前一個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;
}
編輯:進一步testign表明,結構實際上是建立在要素(在這種情況下TabPane
,我能夠使用getTabs().get(n).getContent()
並會得到與他們的孩子的標籤如預期但是,。此時在執行,我仍然得到了TabPane
沒有孩子。直到階段已經顯示後,它不會有孩子。
感謝澄清! – Chris