要充分利用 JavaFX,了解 JavaFX 的设计以及对其包含的功能有一个良好的概述是很有用的。本文的目的是为您提供 JavaFX 的概述。本文将首先查看一般的 JavaFX 设计,然后查看 JavaFX 中的各种功能。
如果你熟悉 Flash / Flex,你会发现 JavaFX 在某种程度上受到了 Flash / Flex 的启发。在 JavaFX 中可以找到一些相同的理念。
一般来说,JavaFX 应用程序包含一个或多个与窗口对应的舞台。每个舞台都有一个附加的场景。每个场景可以附加一个控件、布局等的对象图,称为场景图。这些概念将在后面更详细地解释。以下是 JavaFX 应用程序的一般结构示意图:
舞台
舞台 是 JavaFX 应用程序的外部框架。舞台通常对应于一个窗口。在 JavaFX 可以在浏览器中运行的早期,舞台也可以指 JavaFX 可用于绘制自身的网页内部区域。
自从Java浏览器插件被弃用以来,JavaFX主要用于桌面应用程序。在这里,JavaFX取代了Swing,成为推荐的桌面GUI框架。我必须说,JavaFX看起来比Swing一致性更强,功能更丰富。
在桌面环境中使用时,JavaFX 应用程序可以打开多个窗口。每个窗口都有自己的舞台。
每个阶段由 JavaFX 应用程序中的 Stage
对象表示。JavaFX 应用程序有一个主要的 Stage
对象,该对象由 JavaFX 运行时为您创建。如果需要打开额外的窗口,JavaFX 应用程序可以创建额外的 Stage
对象。例如,用于对话框、向导等。
场景
要在 JavaFX 应用程序的舞台上显示任何内容,您需要一个 scene。一个舞台一次只能显示一个场景,但可以在运行时交换场景。就像剧院的舞台可以重新排列以在演出期间展示多个场景一样,JavaFX 中的舞台对象可以在 JavaFX 应用程序的生命周期内显示多个场景(一次一个)。
你可能会想,为什么一个 JavaFX 应用程序会在一个舞台上有多个场景。想象一下一个电脑游戏。一个游戏可能有多个“屏幕”来展示给用户。例如,一个初始菜单屏幕、主游戏屏幕(游戏进行的地方)、游戏结束屏幕和高分屏幕。每个屏幕都可以用不同的场景来表示。当游戏需要从一个屏幕切换到下一个屏幕时,它只需将相应的场景附加到 JavaFX 应用程序的 Stage
对象上。
场景由 JavaFX 应用程序中的 Scene
对象表示。JavaFX 应用程序必须创建它所需的所有 Scene
对象。
场景图
所有视觉组件(控件、布局等)必须附加到场景中才能显示,而该场景必须附加到舞台上,以便整个场景可见。附加到场景的所有控件、布局等的总对象图称为 场景图。
节点
所有附加到场景图的组件称为 nodes。所有节点都是一个名为 javafx.scene.Node
的 JavaFX 类的子类。
有两种类型的节点:分支节点和叶子节点。分支节点是可以包含其他节点(子节点)的节点。分支节点也被称为父节点,因为它们可以包含子节点。叶子节点是不能包含其他节点的节点。
控制
JavaFX 控件是 JavaFX 组件,它们在 JavaFX 应用程序中提供某种控制功能。例如,按钮、单选按钮、表格、树等。
要使控件可见,它必须附加到某个 Scene
对象的场景图中。
控件通常嵌套在某个 JavaFX 布局组件中,该组件管理控件之间的布局关系。
JavaFX 包含以下控件:
这些控制项将会在单独的文本中进行解释。
布局
JavaFX 布局 是包含其他组件的组件。布局组件管理嵌套在其中的组件的布局。JavaFX 布局组件有时也被称为 父组件,因为它们包含子组件,并且布局组件是 JavaFX 类 javafx.scene.Parent
的子类。
一个布局组件必须附加到某个 Scene
对象的场景图中才能可见。
JavaFX 包含以下布局组件:
这些布局组件中的每一个将在单独的文本中进行介绍。
嵌套布局
可以将布局组件嵌套在其他布局组件内部。这对于实现特定布局非常有用。例如,要获得水平排列的组件行,这些组件不是以网格方式布局,而是每行布局不同,可以在一个 VBox 组件内部嵌套多个 HBox 布局组件。
图表
JavaFX 提供了一组内置的现成图表组件,因此每次需要基本图表时,您不必从头开始编写图表。JavaFX 包含以下图表组件:
- 区域图
- 条形图
- 气泡图
- 折线图
- 饼图
- 散点图
- 堆叠区域图
- 堆叠条形图
2D 图形
JavaFX 包含使在屏幕上绘制 2D 图形变得简单的功能。
3D 图形
JavaFX 包含使在屏幕上绘制 3D 图形变得简单的功能。
音频
JavaFX 包含使在 JavaFX 应用程序中播放音频变得简单的功能。这在游戏或教育应用程序中通常很有用。
视频
JavaFX 包含使在 JavaFX 应用程序中播放视频变得简单的功能。这在流媒体应用程序、游戏或教育应用程序中通常很有用。
WebView
JavaFX 包含一个 WebView
组件,能够显示网页(HTML5、CSS 等)。JavaFX WebView
组件基于 WebKit - 该网页渲染引擎也用于 Chrome 和 Safari。
WebView
组件使得将桌面应用程序与 Web 应用程序混合成为可能。这在某些情况下是有用的。例如,如果您已经有一个不错的 Web 应用程序,但需要一些只能通过桌面应用程序合理提供的功能——例如磁盘访问、与 HTTP 以外的其他网络协议(如 UDP、IAP 等)的通信。