gpt4 book ai didi

JavaFX child 与项目

转载 作者:行者123 更新时间:2023-12-04 03:12:03 25 4
gpt4 key购买 nike

为什么在 JavaFX 中一些控件和布局具有“children”属性,而其他控件和布局具有“items”属性以实现基本相同的目的?背后是否有任何理念或可能存在一些技术差异?

最佳答案

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

Pane类及其子类旨在允许您在场景图中布置其他节点。所以Pane覆盖 getChildren()返回这些节点的可修改列表:本质上是 Pane 的功能是允许您向其中添加节点并在需要时稍后删除它们。 Pane子类以各种方式定位这些节点。

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

一些控件被设计用来显示其他内容。平凡地,一个LabelButton可以有一个 graphic ,这是任何节点。这些类的 API 允许您更改该节点(通过 setGraphic() )。

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

其他复杂控件有getItems()可能返回特定类型的方法:例如Menu.getItems()返回 ObservableList<MenuItem> (所以你不能把 TableView 放在菜单里,你只能把菜单项放在那里)。同样TabPane.getItems()返回 ObservableList<Tab> .

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

getItems()一些方法 Control定义的类用于定义该特定控件的特定 功能。他们还有getChildren()方法,这将返回一个不同的列表。

关于JavaFX child 与项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44421531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com