幕布斯6054654
2023-08-04 14:40:14
仍然很難讓我的循環(huán)正常工作。期待:我正在構(gòu)建一個(gè)簡單的 JavaFX 應(yīng)用程序,其 UI 通過幾個(gè) TextFields 和幾個(gè)按鈕接受輸入。我已經(jīng)構(gòu)建了一個(gè)“重置”按鈕,該按鈕應(yīng)該清除所有文本字段中的文本,但我無法讓它工作。該按鈕的方法在 FXML 元素上循環(huán),我希望它能夠識(shí)別 TextFields 并將它們添加到列表中:private List<TextField> identifyTextFields(Pane parent) {? ? List<TextField> textFieldList = new ArrayList<>();? ? for (Node element : parent.getChildren()) {? ? ? ? if (element instanceof Pane) {? ? ? ? ? ? // if element is a container, scan its children? ? ? ? ? ? scanNodesForTextFields((Pane) element);? ? ? ? ? ? //This line is always false. Why?? ? ? ? ? ? if (element instanceof TextField) {? ? ? ? ? ? ? ? textFieldList.addAll(scanNodesForTextFields((Pane) element));? ? ? ? ? ? }? ? ? ? } else if (element instanceof TextField) {? ? ? ? ? ? textFieldList.add((TextField) element);? ? ? ? }? ? }? ? return textFieldList;}然后,textFieldList 返回到此方法,其中循環(huán)并清除 textField:?@FXMLpublic void resetButtonClicked(ActionEvent event) {? ? List<TextField> textFieldList = identifyTextFields(parentNode);? ? for (TextField textField : textFieldList) {? ? ? ? textField.setText("");? ? }}現(xiàn)實(shí):在里面identifyTextFields(Pane parent)方法,這一行始終為 false:if (element instanceof TextField) {我不懂為什么。我試圖從根節(jié)點(diǎn)(即錨點(diǎn)窗格)開始循環(huán)遍歷 FXML 場(chǎng)景圖的所有元素。如果內(nèi)部循環(huán)發(fā)現(xiàn)其中一個(gè)元素是 TextField,則應(yīng)將其添加到列表中...但它永遠(yuǎn)不會(huì)找到任何 TextField。我在理解調(diào)試結(jié)果方面也遇到了一些困難,但在我看來,該方法甚至沒有訪問 TextFields;就好像它直接跳過它們一樣。我的方法有什么問題嗎?
1 回答

翻閱古今
TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超5個(gè)贊
您可以使用基于“TextField”CSS 類型的 CSS 選擇器的查找來遞歸查找給定父節(jié)點(diǎn)的所有文本字段。
@SuppressWarnings("unchecked")
private Set<TextField> lookupTextFields(Parent parent) {
? ? return (Set<TextField>)(Set<?>) parent.lookupAll("TextField");
}
奇怪的類型鑄造來自:
如何將超類型列表轉(zhuǎn)換為子類型列表?
有時(shí),為了使查找正常運(yùn)行,您需要生成布局通道;看:
獲取JavaFX中節(jié)點(diǎn)的高度(生成布局通道)
這是通過在調(diào)用之前調(diào)用以下命令來完成的lookupAll
:
parent.applyCss(); parent.layout();
但是,對(duì)于您的特定情況,不太可能需要生成布局過程。FXML 加載器在 FXML 加載調(diào)用期間已經(jīng)構(gòu)造了足夠的場(chǎng)景圖,基于“TextField”css 選擇器的查找將起作用。
添加回答
舉報(bào)
0/150
提交
取消