layout.Pane 和 control.Control 之间有什么区别(在 FXML 中)?
What's the difference (in FXML) between layout.Pane and control.Control?
我正在尝试学习如何创建 UI。我目前正在试验的是左侧的主屏幕,用于容纳用户查看的当前信息;和右侧的手风琴,供用户 select 项确定主屏幕中显示的内容。我正在使用 Scene Builder 来帮助我学习。当我将一个 TitledPane(非空)拖到我的 Accordion 中时,它会在其中放置一个 AnchorPane。除非我误解了什么,否则该 TitledPane 中的 select 可用项目列表不允许大于 TitledPane 的当前高度。所以我在手风琴中添加了另一个 TitledPane(空),然后向其添加了一个 ScrollPane(非空)。这再次在 ScrollPane 中添加了一个 AnchorPane。
这是我的 fxml 文档当前的样子(在版本控制、编码和导入之后):
<VBox fx:id="testPane" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="testfxml.FXMLDocumentController">
<children>
<MenuBar>
<menus>
<Menu text="File">
<items>
<MenuItem fx:id="1" text="1" />
<MenuItem fx:id="2" text="2" />
<MenuItem fx:id="3" text="3" />
</items>
</Menu>
</menus>
</MenuBar>
<SplitPane dividerPositions="0.75" prefHeight="600" prefWidth="800">
<items>
<StackPane fx:id="mainscreen" />
<Accordion fx:id="test">
<panes>
<TitledPane text="Test1">
<content>
<AnchorPane fx:id="test1" />
</content>
</TitledPane>
<TitledPane text="Test2">
<content>
<ScrollPane>
<content>
<AnchorPane/>
</content>
</ScrollPane>
</content>
</TitledPane>
</panes>
</Accordion>
</items>
</SplitPane>
</children>
当我查看 javafx (https://docs.oracle.com/javase/8/javafx/api) 的 api 时,AnchorPane 显示如下:
Class 锚点面板
java.lang.Object
javafx.scene.Node
javafx.scene.Parent
javafx.scene.layout.Region
javafx.scene.layout.Pane
javafx.scene.layout.AnchorPane
当 ScrollPane 显示时:
Class 滚动面板
java.lang.Object
javafx.scene.Node
javafx.scene.Parent
javafx.scene.layout.Region
javafx.scene.control.Control
javafx.scene.control.ScrollPane
我假设格式很重要,对我来说这意味着继承。我注意到一直到 "javafx.scene.layout.Region" 都是相同的,但在那之后它们就不同了。一个转到 layout.Pane,另一个转到 control.Control。
我已经通读了 api 上的描述,也许是因为我明显缺乏编码经验,这对我来说不太有意义 - 也许我正在尝试使用一个其中有哪些不正确?
有什么区别?是否需要 AnchorPane?
你可以把任何你喜欢的东西作为TitledPane
的内容。 SceneBuilder(出于某种原因,它似乎过分喜欢 AnchorPane
s)将 AnchorPane
作为默认内容;但是您可以删除它,或者只选择 "TitledPane (empty)" 并添加您自己的内容。例如,您可以删除 AnchorPane
(或以空 TitledPane
开头),然后将 ScrollPane
拖到那里。
听起来您确实需要 ListView
作为 TitledPane
的内容。 ListView
已经配备了按需滚动条功能。
为了回答您的实际问题,API 文档确实指出了继承层次结构。
JavaFX(与大多数 UI 库一样)定义了丰富的继承结构。 Parent
是场景图中任何包含其他 Node
的超类。绝大多数 类 子类 Parent
也子类 Region
,这代表在布局中占据特定 space 的东西。 (例外情况是 Group
,它在布局方面的行为有些不同,而 WebView
可能应该是 Control
的子类,但不是...)。
Control
和 Pane
都是 Region
(因此也是 Parent
)的子类。 Pane
表示 "container":仅用于容纳其他 Node
并管理其布局的东西。 AnchorPane
是 Pane
的子类。 Control
,相比之下,代表一个UI "widget"(用户直接与之交互的东西),所以Label
,Button
,ComboBox
,等等,都是 Control
的子 类。
有些控件实际上相当复杂,并且包含其他 Node
。 ScrollPane
是一个控件的例子,因为用户可以与它交互(通过它的滚动条);它还包含另一个 Node
,称为 "content"。就像您可以使用任何 Node
作为 TitledPane
的内容一样,您可以使用任何节点作为 ScrollPane
的内容。 ScrollPane
的 content
是用户通过 ScrollPane
的滚动条查看和移动的节点。同样,您可以使用任何 Node
作为 ScrollPane
的内容; SceneBuilder 只是选择 AnchorPane
作为默认值(除了必须使用某些东西之外没有真正的原因)。
我正在尝试学习如何创建 UI。我目前正在试验的是左侧的主屏幕,用于容纳用户查看的当前信息;和右侧的手风琴,供用户 select 项确定主屏幕中显示的内容。我正在使用 Scene Builder 来帮助我学习。当我将一个 TitledPane(非空)拖到我的 Accordion 中时,它会在其中放置一个 AnchorPane。除非我误解了什么,否则该 TitledPane 中的 select 可用项目列表不允许大于 TitledPane 的当前高度。所以我在手风琴中添加了另一个 TitledPane(空),然后向其添加了一个 ScrollPane(非空)。这再次在 ScrollPane 中添加了一个 AnchorPane。
这是我的 fxml 文档当前的样子(在版本控制、编码和导入之后):
<VBox fx:id="testPane" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="testfxml.FXMLDocumentController">
<children>
<MenuBar>
<menus>
<Menu text="File">
<items>
<MenuItem fx:id="1" text="1" />
<MenuItem fx:id="2" text="2" />
<MenuItem fx:id="3" text="3" />
</items>
</Menu>
</menus>
</MenuBar>
<SplitPane dividerPositions="0.75" prefHeight="600" prefWidth="800">
<items>
<StackPane fx:id="mainscreen" />
<Accordion fx:id="test">
<panes>
<TitledPane text="Test1">
<content>
<AnchorPane fx:id="test1" />
</content>
</TitledPane>
<TitledPane text="Test2">
<content>
<ScrollPane>
<content>
<AnchorPane/>
</content>
</ScrollPane>
</content>
</TitledPane>
</panes>
</Accordion>
</items>
</SplitPane>
</children>
当我查看 javafx (https://docs.oracle.com/javase/8/javafx/api) 的 api 时,AnchorPane 显示如下:
Class 锚点面板
java.lang.Object
javafx.scene.Node
javafx.scene.Parent
javafx.scene.layout.Region
javafx.scene.layout.Pane
javafx.scene.layout.AnchorPane
当 ScrollPane 显示时:
Class 滚动面板
java.lang.Object
javafx.scene.Node
javafx.scene.Parent
javafx.scene.layout.Region
javafx.scene.control.Control
javafx.scene.control.ScrollPane
我假设格式很重要,对我来说这意味着继承。我注意到一直到 "javafx.scene.layout.Region" 都是相同的,但在那之后它们就不同了。一个转到 layout.Pane,另一个转到 control.Control。
我已经通读了 api 上的描述,也许是因为我明显缺乏编码经验,这对我来说不太有意义 - 也许我正在尝试使用一个其中有哪些不正确?
有什么区别?是否需要 AnchorPane?
你可以把任何你喜欢的东西作为TitledPane
的内容。 SceneBuilder(出于某种原因,它似乎过分喜欢 AnchorPane
s)将 AnchorPane
作为默认内容;但是您可以删除它,或者只选择 "TitledPane (empty)" 并添加您自己的内容。例如,您可以删除 AnchorPane
(或以空 TitledPane
开头),然后将 ScrollPane
拖到那里。
听起来您确实需要 ListView
作为 TitledPane
的内容。 ListView
已经配备了按需滚动条功能。
为了回答您的实际问题,API 文档确实指出了继承层次结构。
JavaFX(与大多数 UI 库一样)定义了丰富的继承结构。 Parent
是场景图中任何包含其他 Node
的超类。绝大多数 类 子类 Parent
也子类 Region
,这代表在布局中占据特定 space 的东西。 (例外情况是 Group
,它在布局方面的行为有些不同,而 WebView
可能应该是 Control
的子类,但不是...)。
Control
和 Pane
都是 Region
(因此也是 Parent
)的子类。 Pane
表示 "container":仅用于容纳其他 Node
并管理其布局的东西。 AnchorPane
是 Pane
的子类。 Control
,相比之下,代表一个UI "widget"(用户直接与之交互的东西),所以Label
,Button
,ComboBox
,等等,都是 Control
的子 类。
有些控件实际上相当复杂,并且包含其他 Node
。 ScrollPane
是一个控件的例子,因为用户可以与它交互(通过它的滚动条);它还包含另一个 Node
,称为 "content"。就像您可以使用任何 Node
作为 TitledPane
的内容一样,您可以使用任何节点作为 ScrollPane
的内容。 ScrollPane
的 content
是用户通过 ScrollPane
的滚动条查看和移动的节点。同样,您可以使用任何 Node
作为 ScrollPane
的内容; SceneBuilder 只是选择 AnchorPane
作为默认值(除了必须使用某些东西之外没有真正的原因)。