Package javafx.scene.control
JavaFX用户界面控件(UI控件或仅控件)是JavaFX场景中的专用节点,特别适用于许多不同应用程序环境中的重用。 它们被设计为由设计师和开发人员高度定制的视觉。 它们设计用于布局系统。 突出控制的例子包括Button
, Label
, ListView
,并TextField
。
由于控制是Nodes
在场景图,它们可以自由地与混合Groups
, Images
, Media
, Text
,和basic geometric shapes
。 在编写新的UI控件时不是很简单,使用和设计它们非常简单,特别是对现有的Web开发人员。
本文档的其余部分将描述JavaFX UI控件库的基本架构,如何对现有控件进行样式编写,编写自定义外观以及如何使用控件来构建更复杂的用户界面。
建筑
控件遵循经典的MVC设计模式。 Control
是“模特儿”。 它包含操纵该状态的状态和功能。 Control类本身不知道它如何呈现或用户交互是什么。 这些任务被委派给Skin
(“视图”),可以将视图和控制器功能内部分离成单独的类,尽管目前没有“控制器”方面的公共API。
所有控件都从Control类扩展,它是Parent
节点,它是一个Node
。 每个控件都有一个单一的皮肤的参考,它是控件的视图实现。 控制委托皮肤负责计算控制的最小,最大和最小尺寸,基线偏移和命中测试(遏制和交叉)。 皮肤或皮肤代表也负责对包含焦点的控件上发生的所有相关关键事件进行实施和回复。
控制
控制从Parent
扩展,因此不是叶节点。 从开发人员或设计师的角度来说,在许多情况下,Control可以被认为是一个叶节点。 例如,开发者或设计者可以将Button视为一个Rectangle或其他简单的叶节点。
由于控件可调整大小,因此控件将自动调整为每个场景图脉冲的首选大小 。 设置控件的宽度和高度不会影响其首选大小。 当在布局容器中使用时,施加在控件上的布局约束(或在控件上手动指定)将决定它的定位和大小。
随时可以更改控件的皮肤。 这样做会将控制标记为需要布局,因为更改皮肤可能已更改了控件的首选大小。 如果在创建控件时没有指定皮肤,则将为所有内置控件提供默认的基于CSS的皮肤。
每个控件可能具有指定的可选工具提示。 工具提示是一种控件,当鼠标从某个时间段悬停在控件上时,该控件会向用户显示有关控件的一些(通常是文本的)信息。 它可以从CSS与其他控件相同。
默认情况下,控件中的focusTraversable
被覆盖为true,而使用Node,默认情况下为false。 默认情况下不能对焦的控件(例如Label)会将其替换为false。
将getMinWidth,getMinHeight,getPrefWidth,getPrefHeight,getMaxWidth和getMaxHeight函数直接委派给皮肤。 将baselineOffset方法委托给皮肤的节点。 不建议子类改变这些代理。
造型控制
有两种方法可以自定义控件的外观。 最困难但最灵活的方法是为控件编写一个新的皮肤,它精确地实现了您对控件所需的视觉效果。 有关详细信息,请参阅皮肤文档。
通过使用CSS,最简单但非常强大的对内置控件进行样式化的方法。 请注意,在此版本中,以下CSS描述仅适用于为内置控件提供的默认外观。 随后的版本将使这一般可用于希望利用这些CSS功能的任何自定义第三方控件。
内置控件的每个默认外观都由多个单独样式的区域或区域组成。 这很像一个由<div>组成的HTML页面,然后从CSS样式化。 每个单独的区域可以绘制背景,边框,图像,填充,边距等。 JavaFX CSS支持包括具有多个背景和边框以及派生颜色的功能。 这些功能使得从CSS更改JavaFX中的Controls的外观非常容易。
用于绘制内置控件的默认外观的颜色均来自基色,重音颜色和背景颜色。 只需通过修改控件的基础颜色,您可以更改派生的渐变,并创建按钮或其他控件,使用默认的外观可视化显示,而视觉上却突出显示。
与场景图中的所有其他节点一样,控件可以通过使用外部样式表或直接在控件上指定样式进行样式化。 虽然例如,通过在Node上直接指定样式来更容易地表达和理解,建议使用外部样式表,并使用Control的styleClass或id,就像使用“class”或id具有HTML CSS的HTML元素。
每个UI控件都指定一个styleClass,可用于从外部样式表中对控件进行样式调整。 例如,Button控件被赋予了“按钮”CSS样式类。 CSS样式类名称是连字符分隔的小写,而不是骆驼壳,否则它们是完全相同的。 例如,Button是“按钮”,RadioButton是“radio-button”,Tooltip是“tooltip”等等。
每个控件的类文档定义了可以设置样式的默认皮肤区域。 有关JavaFX提供的CSS功能的更多信息,请参阅CSS Reference Guide 。
-
接口摘要 接口 描述 Skin<C extends Skinnable> 基类通过定义节点的场景图来定义用户界面控件的视觉表示,以表示皮肤。Skinnable Skinnable接口由Control
类实现,因此由所有Control实现实现。TextInputControl.Content 界面表示文本输入的内容。Toggle 表示可以在选定状态和未选择状态之间切换的控件。 -
类摘要 Class 描述 Accordion 手风琴是一组TitlePanes
。Alert Alert类对Dialog
类进行子类化,并为许多预构建的对话框类型提供支持,可以轻松向用户显示提示响应。Button 一个简单的按钮控件。ButtonBar ButtonBar本质上是一个HBox
,具有操作系统特定按钮放置的附加功能。ButtonBase 按钮式UI控件的基类,包括超链接,按钮,ToggleButtons,复选框和RadioButtons。ButtonType ButtonType类用作JavaFXDialog
API(更具体地说是DialogPane
API)的一部分,用于指定在对话框中向用户显示哪些按钮。Cell<T> CheckBox 三态选择控件通常在选中时以带有复选标记或刻度标记的方式打包。CheckBoxTreeItem<T> TreeItem子类增加了在选定的,未选择的和不确定的状态中的支持。CheckBoxTreeItem.TreeModificationEvent<T> 一个TreeModificationEvent类的工作原理与TreeItem.TreeModificationEvent
类相似,因为这个事件会引发 CheckBoxTreeItem层次结构,直到父节点为空。CheckMenuItem AMenuItem
可以在选定状态和未选择状态之间切换。ChoiceBox<T> ChoiceBox用于向用户呈现一组相对较小的预定义选项,从中可以选择。ChoiceDialog<T> 一个对话框,向用户显示选择列表,最多可以从中选择一个项目。ColorPicker ColorPicker控件允许用户从标准的颜色调色板中选择一种颜色,只需点击一下简单的选择或定义自己的自定义颜色。ComboBox<T> 针对最常见形式的ComboBox的ComboBoxBase
抽象类的实现,其中向用户提供弹出列表,以向他们提供他们可以选择的选项。ComboBoxBase<T> ComboBox类控件的抽象基类。ContextMenu 一个包含菜单项的ObservableList的弹出控件。Control 所有用户界面控件的基类。CustomMenuItem DateCell DateCell由DatePicker
用于在日历月中呈现单个网格单元格。DatePicker DatePicker控件允许用户输入日期作为文本或从日历弹出窗口中选择日期。Dialog<R> JavaFX中的Dialog包装了一个DialogPane
,并提供了必要的API来将其呈现给最终用户。DialogEvent 与对话框显示/隐藏操作相关的事件。DialogPane FocusModel<T> FocusModel实现的抽象基类。Hyperlink 一个HTML标签,可以是一个图形和/或文本,用于响应滚动和点击。IndexedCell<T> 一个Cell
的实现,它包含一个索引属性,它映射到可视化的底层的数据模型中。IndexRange 表示整数值的连续范围的类。Label 标签是不可编辑的文本控件。Labeled A标签Control
是其用户界面的一部分,与其相关联的文本内容。ListCell<T> ListView<T> ListView显示用户可以从中选择或与用户可以进行交互的项目的水平或垂直列表。ListView.EditEvent<T> 一个Event
在ListView中专门用于表示编辑相关事件的子类。Menu 可触发的项目的弹出菜单,仅根据请求向用户显示。MenuBar MenuBar控件传统上放置在用户界面的最上方,嵌入其中是Menus
。MenuButton MenuButton是一个按钮,当点击或按下时,它将显示一个ContextMenu
。MenuItem MenuItem旨在与Menu
结合使用,为用户提供选项。MultipleSelectionModel<T> 一个抽象类,扩展SelectionModel
以添加API以支持多选。Pagination 分页控件用于单个内容的页面之间的导航,该页面已分为较小的部分。PasswordField 掩码输入字符的文本字段。PopupControl PopupWindow的扩展,允许CSS样式。ProgressBar ProgressIndator的专业化表示为横杠。ProgressIndicator 用于指示进度的循环控制,无限(也称为不确定)或有限。RadioButton RadioButtons创建一系列只能选择一个项目的项目。RadioMenuItem ResizeFeaturesBase<S> 列使用的不可变包装类可调整由控件(如TableView
和TreeTableView
)提供的策略大小。ScrollBar 具有增量和减量按钮的水平或垂直条,以及用户可以与之交互的“拇指”。ScrollPane 提供其内容的滚动,剪切视口的控件。ScrollToEvent<T> 事件相关ScrollPane
所虚拟化控制,比如ListView
,TableView
,TreeView
和TreeTableView
。SelectionModel<T> SelectionModel是UI控件用来提供一致的API来维护选择的抽象类。Separator 水平或垂直分隔线。SeparatorMenuItem 甲MenuItem
该顾名思义允许的水平隔板将要被嵌入在其内,通过分配一个Separator
到content
所述的属性CustomMenuItem
这提供了方便作为基menuitems
可以通过分离器进行分离。SingleSelectionModel<T> 一个SelectionModel,它强制要求在任何给定的时间只选择一个索引。SkinBase<C extends Control> 基本实现类,用于通过定义节点的场景图来定义用户界面控件的可视化表示,以表示skin
。Slider 滑块控件用于显示连续或离散的有效数字选项范围,并允许用户与控件进行交互。SortEvent<C> 事件相关TableView
和TreeTableView
排序。Spinner<T> 单行文本字段,允许用户从有序序列中选择一个数字或一个对象值。SpinnerValueFactory<T> SpinnerValueFactory是JavaFXSpinner control
背后的模型 - 没有值工厂安装的Spinner不可用。SpinnerValueFactory.DoubleSpinnerValueFactory 一个SpinnerValueFactory
实现,旨在迭代双重值。SpinnerValueFactory.IntegerSpinnerValueFactory ASpinnerValueFactory
旨在迭代整数值的实现。SpinnerValueFactory.ListSpinnerValueFactory<T> 一个SpinnerValueFactory
实现,旨在迭代一个值列表。SplitMenuButton SplitMenuButton,像MenuButton
与从菜单中选择MenuItem
的概念密切相关。SplitPane 具有两个或更多个侧面的控制器,每个侧面由分隔件隔开,可以由用户拖动以给其中一个侧面提供更多的空间,导致另一侧收缩相等的量。SplitPane.Divider 在SplitPane中代表一个分隔符。Tab 标签位于TabPane
中 ,其中每个标签代表单个“页面”。TableCell<S,T> 在TableView
中表示单行/列交集。TableColumn<S,T> ATableView
由多个TableColumn实例组成。TableColumn.CellDataFeatures<S,T> 在TableColumn中使用的支持类作为包装类,为特定的Cell
提供所有必要的信息。TableColumn.CellEditEvent<S,T> 用户在表单元格上执行编辑时触发的事件。TableColumnBase<S,T> 表类控件(例如TableView
和TreeTableView
)由零个或多个具体TableColumnBase子类(TableColumn
和TreeTableColumn
)的实例组成。TableFocusModel<T,TC extends TableColumnBase<T,?>> FocusModel实现的抽象基类,用于表类控件(最着名的是TableView
和TreeTableView
) 。TablePosition<S,T> 此类用于表示TableView中的单个行/列/单元格。TablePositionBase<TC extends TableColumnBase> 此类用于表示表中的单个行/列/单元格。TableRow<T> TableRow是一个IndexedCell
,但很少需要由开发人员使用创建TableView实例。TableSelectionModel<T> 在表类控件中使用的MultipleSelectionModel实现的抽象基类(最着名的是TableView
和TreeTableView
) 。TableView<S> TableView控件旨在可视化无限数量的数据行,分为列。TableView.ResizeFeatures<S> 用于TableViewcolumn resize
功能的不可变包装类。TableView.TableViewFocusModel<S> AFocusModel
具有附加功能以支持TableView控件的要求。TableView.TableViewSelectionModel<S> SelectionModel
抽象类的简单扩展,允许对TableView控件的特殊支持。TabPane TextArea 文本输入组件,允许用户输入多行纯文本。TextField 文本输入组件,允许用户输入一行未格式化的文本。TextFormatter<V> 格式化器通过使用两种不同的机制来描述TextInputControl
文本的格式:可以拦截和修改用户输入的过滤器(TextFormatter.getFilter()
)。TextFormatter.Change 包含表示TextInputControl的内容或选择更改的状态。TextInputControl 文本输入控件的抽象基类。TextInputDialog 显示给用户的文本输入控件的对话框。TitledPane TitledPane是一个可以打开和关闭的标题的面板。ToggleButton AToggleButton
是具有选择能力的专业控制。ToggleGroup ToolBar ToolBar是一个可以水平或垂直显示项目的控件。Tooltip 工具提示是常见的UI元素,通常用于在节点由鼠标悬停时在场景图中显示有关节点的附加信息。TreeCell<T> TreeItem<T> 单个节点的模型为诸如TreeView之类的控件提供值的层次结构。TreeItem.TreeModificationEvent<T> 一个Event
,其中包含所有形式的TreeItem修改的相关信息。TreeTableCell<S,T> 表示TreeTableView
中的单行 /列交集。TreeTableColumn<S,T> ATreeTableView
由多个TreeTableColumn实例组成。TreeTableColumn.CellDataFeatures<S,T> 在TreeTableColumn中使用的支持类作为包装类,为特定的Cell
提供所有必要的信息。TreeTableColumn.CellEditEvent<S,T> 用户在表单元格上执行编辑时触发的事件。TreeTablePosition<S,T> 此类用于在TreeTableView中表示单个行/列/单元格。TreeTableRow<T> TreeTableRow是一个IndexedCell
,但很少需要由开发人员使用创建TreeTableView实例。TreeTableView<S> TreeTableView控件旨在可视化无限数量的数据行,分为列。TreeTableView.EditEvent<S> 一个Event
在TreeTableView中专门用于表示编辑相关事件的子类。TreeTableView.ResizeFeatures<S> 用于TableViewcolumn resize
功能的不可变包装类。TreeTableView.TreeTableViewFocusModel<S> AFocusModel
具有支持TableView控件要求的附加功能。TreeTableView.TreeTableViewSelectionModel<S> SelectionModel
抽象类的简单扩展,允许对TreeTableView控件的特殊支持。TreeView<T> TreeView控件提供了一个树根视图(类型为TreeItem
)。TreeView.EditEvent<T> 一个Event
在TreeView中专门用于表示编辑相关事件的子类。 -
枚举摘要 Enum 描述 Alert.AlertType ButtonBar.ButtonData 枚举所有可用的按钮数据注释。ContentDisplay 将内容放置在标签内的位置。OverrunStyle 当渲染文本的空间小于渲染整个字符串所需的空间时,定义标记的控件的行为。ScrollPane.ScrollBarPolicy 表示可滚动控件在决定是否显示滚动条时使用的策略的枚举。SelectionMode 用于指定在MultipleSelectionModel
中可以选择多少项的枚举 。TableColumn.SortType 枚举,指定应用于特定列的排序类型。TabPane.TabClosingPolicy 这指定了TabPane如何处理从最终用户角度看待标签关闭。TreeSortMode 指定如何对树状UI控件中的树项进行排序。TreeTableColumn.SortType 枚举,指定应用于特定列的排序类型。