我的問題是這樣的。我需要驗證我的表單,並且已經完成了CSS樣式以及我需要的所有內容。但我想知道我是否有辦法通過anchorpane獲取我的表單組件。如何在JavaFX中從AnchorPane獲取組件
有沒有什麼辦法可以通過fx:id獲得anchorpane的組件?
我的問題是這樣的。我需要驗證我的表單,並且已經完成了CSS樣式以及我需要的所有內容。但我想知道我是否有辦法通過anchorpane獲取我的表單組件。如何在JavaFX中從AnchorPane獲取組件
有沒有什麼辦法可以通過fx:id獲得anchorpane的組件?
使用FXML控制器成員引用
或許給您正在使用FXML最適合您的解決方案,是利用參考節點,其在控制器中注射的。當你有一個fx:id
元素時,你的FXML中會有一個相應的成員,並帶有一個@FXML
註解。您可以使用Passing Parameters JavaFX FXML中定義的機制來獲取對控制器的引用。控制器可以通過getter或者(通常是更好的)直接暴露節點,公開一些代表節點狀態的屬性(例如標籤的文本),並且如果需要的話你可以監聽和操縱這些屬性。在窗格
使用的getChildren您可以撥打pane.getChildren()得到窗格的孩子,如果需要的話還遞歸調用每個孩子的getChildren。一個複雜的解決方案可以使用visitor pattern。
使用CSS查找
正如你已經設置了CSS樣式,而不是通過迭代的孩子,你可以使用一個CSS查找,以look up a child by a CSS id。請注意,除了fx:id
屬性之外,您還必須爲節點定義一個id
屬性,以便此類查找有效。還要注意,CSS必須已經被應用到節點上才能工作,例如,節點在活動場景中顯示(已顯示),或者手動觸發父節點的applyCSS()
功能(當它連接到場景時)。這些額外的約束和CSS選擇器的非類型化,非編譯器驗證的性質,使得使用CSS查找作爲一種機制來發現兒童是一個相當脆弱的解決方案,並且只在相當有限的情況下才真正推薦。
鑑於你的任務是表單驗證,你可能想谷歌的JavaFX表單驗證,並選擇一個現有的庫,而不是試圖推出自己的事情。您可能會考慮的示例庫有JideFX,FXForm2或ControlsFX。