如何从JavaFX中的AnchorPane获取组件

时间:2014-11-04 23:59:59

标签: java validation javafx

我的问题是这个。我需要验证我的表单,并且我已经完成了CSS样式和我需要的一切。但我想知道我是否有办法通过anchorpane获取我的表单组件。

有没有什么办法可以通过fx:id?

获得一个锚定窗格的组件

1 个答案:

答案 0 :(得分:2)

使用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。请注意,除了id属性之外,您还必须为节点定义fx:id属性,以使此类查找起作用。另请注意,CSS必须已应用于节点才能使其正常工作,例如节点在活动场景上显示(已显示),或者您已将applyCSS()功能手动触发到父节点(当它附加到场景时)。这些额外的约束和CSS选择器的非类型化,非编译器验证性质,使得CSS查找作为一种机制,可以找到一个非常脆弱的解决方案,并且只在相当有限的情况下才真正推荐。


鉴于您的任务是表单验证,您可能希望谷歌JavaFX表单验证并选择现有的库而不是尝试滚动自己的东西。您可能考虑的示例库是JideFX,FXForm2或ControlsFX。