Module  javafx.controls

Package javafx.scene.control

JavaFX用户界面控件(UI控件或仅控件)是JavaFX场景中的专用节点,特别适用于许多不同应用程序环境中的重用。 它们被设计为由设计师和开发人员高度定制的视觉。 它们设计用于布局系统。 突出控制的例子包括ButtonLabelListView ,并TextField

由于控制是Nodes在场景图,它们可以自由地与混合GroupsImagesMediaText ,和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