JavaFX子项与项目

时间:2017-06-07 19:44:31

标签: javafx

为什么在JavaFX中某些控件和布局具有“children”属性,而其他具有“items”属性的用户具有相同的目的?是否有任何哲学背后或可能存在技术差异?

1 个答案:

答案 0 :(得分:1)

getChildren()方法在Parent中定义,因此由Parent的所有子类继承,包括PaneControlParent中此方法的实现返回一个不可修改的子节点列表(因此它可用于在场景图中导航,但不能用于操纵父节点中包含的内容) )。

Pane类及其子类旨在允许您在场景图中布置其他节点。因此Pane会覆盖getChildren()以返回这些节点的可修改列表:基本上Pane的功能是允许您向其添加节点并将其删除以后如果你需要的话。 Pane子类以各种方式定位这些节点。

Control类是Parent的子类,因为控件包含其他节点。 (例如,ComboBox包含标签或文本字段(如果它可以编辑),以及用于显示下拉列表的按钮。)Control从{继承getChildren()方法{1}},因此它返回子节点的不可修改列表,但不允许您更改该列表(因为如果从控件中删除节点,它将不再像控件的设计方式那样运行表现得好。)

某些控件旨在显示其他内容。琐碎的是,ParentLabel可以有Button,这是任何节点。这些类的API允许您更改该节点(通过graphic)。

更复杂的控件允许您添加和删除节点集合,作为其预期功能的一部分。因此,例如setGraphic()允许您添加任意数量的节点,并在需要时删除它们。但是,这些不是SplitPane中包含的节点。因此SplitPane方法仍然从超类中实现它:它返回拆分窗格的所有子节点的不可修改的列表:包括您添加的项目和分隔符(以及可能的其他内容)。另一方面,getChildren()方法返回允许更改的节点列表:因此您可以通过调用getItems()来删除项目(并且拆分窗格将从其子项中删除相应的分隔符)列表也是如此)。

其他复杂控件具有可能返回特定类型的splitPane.getItems().remove(...)方法:例如getItems()会返回Menu.getItems()(因此您无法在菜单中添加ObservableList<MenuItem>,您只能将菜单项放入其中)。同样,TableView会返回TabPane.getItems()

简而言之,这两件事的功能完全不同。 ObservableList<Tab>返回父节点的子节点列表:它允许您检查和导航场景图。专门选择这样做的getChildren()子类可能会返回一个可修改的列表,允许您将它们用作通用容器。

某些Parent类定义的getItems()方法用于定义该特定控件的特定功能。他们仍然使用Control方法,这将返回不同的列表。