JavaFX 概述

内容

要充分利用 JavaFX,了解 JavaFX 的设计以及对其包含的功能有一个良好的概述是很有用的。本文的目的是为您提供 JavaFX 的概述。本文将首先查看一般的 JavaFX 设计,然后查看 JavaFX 中的各种功能。

如果你熟悉 Flash / Flex,你会发现 JavaFX 在某种程度上受到了 Flash / Flex 的启发。在 JavaFX 中可以找到一些相同的理念。

一般来说,JavaFX 应用程序包含一个或多个与窗口对应的舞台。每个舞台都有一个附加的场景。每个场景可以附加一个控件、布局等的对象图,称为场景图。这些概念将在后面更详细地解释。以下是 JavaFX 应用程序的一般结构示意图:

JavaFX overview of JavaFX internal application structure.

舞台

舞台 是 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 包含以下布局组件:

  • 区域
  • 面板
  • HBox
  • VBox
  • 流面板
  • 边界面板
  • 边界面板
  • 堆叠面板
  • 瓦片面板
  • 网格面板
  • 锚面板
  • 文本流

这些布局组件中的每一个将在单独的文本中进行介绍。

嵌套布局

可以将布局组件嵌套在其他布局组件内部。这对于实现特定布局非常有用。例如,要获得水平排列的组件行,这些组件不是以网格方式布局,而是每行布局不同,可以在一个 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 等)的通信。

总结
本文介绍了JavaFX的设计和功能概述。JavaFX应用程序由一个或多个阶段(窗口)组成,每个阶段都有一个场景,场景中包含控制、布局等对象的图形结构,称为场景图。JavaFX的阶段对应于桌面应用程序的窗口,支持多个窗口的打开。场景是显示在阶段上的内容,JavaFX应用可以在运行时交换场景。所有可视组件必须附加到场景图中才能显示。JavaFX提供了多种控件和布局组件,控件如按钮、表格等,布局组件如HBox、VBox等。此外,JavaFX还支持图表、2D和3D图形、音频和视频播放,以及WebView组件,能够显示网页内容。这些功能使得JavaFX成为一个功能丰富且一致的桌面GUI框架,适合开发各种应用程序。