提交 8d12889d 编写于 作者: W wizardforcel

2021-10-10 16:56:35

上级 da7fafda
# 序言 # 零、序言
正如其标题(*JavaFX 8 Essentials*所示,本书是一本实用的书,为您提供了一套强大的基本技能,将引导您变得足够自信,以快速构建高性能 JavaFX 8 客户端应用程序。这些应用程序通过硬件加速的图形利用了现代 GPU,同时为客户提供了引人注目、复杂且奇特的富客户端 GUI,这将给他们留下深刻印象。 正如其标题(*JavaFX 8 Essentials*所示,本书是一本实用的书,为您提供了一套强大的基本技能,将引导您变得足够自信,以快速构建高性能 JavaFX 8 客户端应用。这些应用通过硬件加速的图形利用了现代 GPU,同时为客户提供了引人注目、复杂且奇特的富客户端 GUI,这将给他们留下深刻印象。
学习 JavaFX 8 essentials 是创建最重要的在任何平台上运行的应用程序的第一步,从*台式机、Web、移动设备、平板电脑**嵌入式*设备,如*Arduino**Raspberry Pi*和多核开发。遵循 Java 的*编写一次,在任何地方运行*范例,JavaFX 也保留了相同的功能。因为 JavaFX8 完全是用 Java 语言从头开始编写的,所以您会感到宾至如归。 学习 JavaFX 8 essentials 是创建最重要的在任何平台上运行的应用的第一步,从*台式机、Web、移动设备、平板电脑**嵌入式*设备,如*Arduino**Raspberry Pi*和多核开发。遵循 Java 的*编写一次,在任何地方运行*范例,JavaFX 也保留了相同的功能。因为 JavaFX8 完全是用 Java 语言从头开始编写的,所以您会感到宾至如归。
大部分章节都是快节奏的指南,将帮助您在 Java GUI 编程、利用 JavaFX8 以及在任何平台上部署和运行方面取得领先。 大部分章节都是快节奏的指南,将帮助您在 Java GUI 编程、利用 JavaFX8 以及在任何平台上部署和运行方面取得领先。
在阅读本书的示例时,您会发现代码是在 Java8(是的,JavaSE8)上使用 JavaFX8 编写的,因此新的 API 和语言增强功能将帮助您成为一名更高效的开发人员。话虽如此,探索所有新的 Java8 功能将非常方便(我鼓励您这样做)。 在阅读本书的示例时,您会发现代码是在 Java8(是的,JavaSE8)上使用 JavaFX8 编写的,因此新的 API 和语言增强功能将帮助您成为一名更高效的开发人员。话虽如此,探索所有新的 Java8 功能将非常方便(我鼓励您这样做)。
最后,同样重要的是,您将能够使用 JavaFX 开发与 Leap motion 设备交互的惊人的非接触式交互式运动应用程序 最后,同样重要的是,您将能够使用 JavaFX 开发与 Leap motion 设备交互的惊人的非接触式交互式运动应用。
# 这本书涵盖的内容 # 这本书涵盖的内容
[第一章](1.html#aid-DB7S1 "Chapter 1. Getting Started with JavaFX 8")*JavaFX8 入门*是对 JavaFX8 的介绍。它讨论了 javafx8 作为一种技术,为什么您应该关注它,它的历史,核心特性,以及在哪里可以使用它。 [第一章](1.html#aid-DB7S1 "Chapter 1. Getting Started with JavaFX 8")*JavaFX8 入门*是对 JavaFX8 的介绍。它讨论了 javafx8 作为一种技术,为什么您应该关注它,它的历史,核心特性,以及在哪里可以使用它。
因此,是时候准备好使用正确的工具并完成必要的步骤来安装 JavaFX8 及其支持的开发工具了。在本章中了解可提高读者工作效率的其他工具。最后,我们将用一个简单的 Hello JavaFX 应用程序来结束本章,以验证我们是否走上了正确的道路。 因此,是时候准备好使用正确的工具并完成必要的步骤来安装 JavaFX8 及其支持的开发工具了。在本章中了解可提高读者工作效率的其他工具。最后,我们将用一个简单的 Hello JavaFX 应用来结束本章,以验证我们是否走上了正确的道路。
[第 2 章](2.html#aid-K0RQ2 "Chapter 2. JavaFX 8 Essentials and Creating a Custom UI")*JavaFX 8 Essentials 和创建自定义 UI*讨论了没有什么比接受复杂建议作为问题解决方案更令人沮丧的了。正因为如此,我总是把重点放在要点上。为了在 JavaFX 场景中渲染图形,您需要一个基本的应用程序、场景、画布、形状、文本、控件和颜色。 [第 2 章](2.html#aid-K0RQ2 "Chapter 2. JavaFX 8 Essentials and Creating a Custom UI")*JavaFX 8 Essentials 和创建自定义 UI*讨论了没有什么比接受复杂建议作为问题解决方案更令人沮丧的了。正因为如此,我总是把重点放在要点上。为了在 JavaFX 场景中渲染图形,您需要一个基本的应用、场景、画布、形状、文本、控件和颜色。
此外,您还将了解 JavaFX8 的基本应用程序结构,这些结构可以作为任何未来应用程序的主干。最后,我们还将探讨一些 JavaSE8 特性(如 Lambda、Streams、JavaFX 属性等),以帮助提高代码可读性、质量和生产率。 此外,您还将了解 JavaFX8 的基本应用结构,这些结构可以作为任何未来应用的主干。最后,我们还将探讨一些 JavaSE8 特性(如 Lambda、Streams、JavaFX 属性等),以帮助提高代码可读性、质量和生产率。
在获得了创建结构化 JavaFX8 应用程序的实践经验之后,如果您可以在不改变其功能的情况下更改应用程序的 UI,那不是很好吗?在本章中,您将学习主题化以及如何通过应用各种主题(外观)和 JavaFXCSS 样式的基本原理来定制应用程序 在获得了创建结构化 JavaFX8 应用的实践经验之后,如果您可以在不改变其功能的情况下更改应用的 UI,那不是很好吗?在本章中,您将学习主题化以及如何通过应用各种主题(外观)和 JavaFXCSS 样式的基本原理来定制应用
您将使用场景生成器以图形方式创建和定义 UI 屏幕,并将其保存为 JavaFXML 格式的文件。最后,您将了解如何创建自定义控件。 您将使用场景生成器以图形方式创建和定义 UI 屏幕,并将其保存为 JavaFXML 格式的文件。最后,您将了解如何创建自定义控件。
[第 3 章](3.html#aid-PNV62 "Chapter 3. Developing a JavaFX Desktop and Web Application")*开发 JavaFX 桌面和 Web 应用程序*介绍了如何开发引人注目的桌面和 Web 应用程序,该应用程序利用多核硬件加速 GPU,以提供具有惊人外观的高性能基于 UI 的应用程序 [第 3 章](3.html#aid-PNV62 "Chapter 3. Developing a JavaFX Desktop and Web Application")*开发 JavaFX 桌面和 Web 应用*介绍了如何开发引人注目的桌面和 Web 应用,该应用利用多核硬件加速 GPU,以提供具有惊人外观的高性能基于 UI 的应用
由于 JavaFX 完全是用 Java 从头开始编写的,一些 JavaSE8 内置的核心库将用于为我们的应用程序提供动力。此外,您还将学习如何将应用程序打包为要启动和分发的独立应用程序 由于 JavaFX 完全是用 Java 从头开始编写的,一些 JavaSE8 内置的核心库将用于为我们的应用提供动力。此外,您还将学习如何将应用打包为要启动和分发的独立应用
此外,我们还将介绍 JavaFX8 所使用的任何 web 应用程序中的基本核心 web API,如`javafx.scene.web.WebEngine``javafx.scene.web.WebView` 此外,我们还将介绍 JavaFX8 所使用的任何 web 应用中的基本核心 web API,如`javafx.scene.web.WebEngine``javafx.scene.web.WebView`
我们还将讨论 JavaFX 和 HTML5 之间的关系,这很重要,因为它们相互补充。JavaFX 的富客户端 API,加上 HTML5 丰富的 web 内容,创造了一种类似于 RIA web 应用程序的用户体验,具有本机桌面软件的特点。 我们还将讨论 JavaFX 和 HTML5 之间的关系,这很重要,因为它们相互补充。JavaFX 的富客户端 API,加上 HTML5 丰富的 web 内容,创造了一种类似于 RIA web 应用的用户体验,具有本机桌面软件的特点。
[第 4 章](4.html#aid-SJGS1 "Chapter 4. Developing a JavaFX Application for Android")*为 Android*开发 JavaFX 应用程序,随着非 pc 客户端的增长,手机和平板电脑正在赢得市场份额。JavaFX8 可以为 Web 和桌面提供富客户端应用程序。如果编写 JavaFX 应用程序,请确保希望它在尽可能多的设备上运行。本章将为您提供有关 SDK 的基本实践经验和知识,这些 SDK 允许用户为 Android 手机创建本机应用程序 [第 4 章](4.html#aid-SJGS1 "Chapter 4. Developing a JavaFX Application for Android")*为 Android*开发 JavaFX 应用,随着非 pc 客户端的增长,手机和平板电脑正在赢得市场份额。JavaFX8 可以为 Web 和桌面提供富客户端应用。如果编写 JavaFX 应用,请确保希望它在尽可能多的设备上运行。本章将为您提供有关 SDK 的基本实践经验和知识,这些 SDK 允许用户为 Android 手机创建本机应用
[第 5 章](5.html#aid-VF2I1 "Chapter 5. Developing a JavaFX Application for iOS")*为 iOS*开发 JavaFX 应用程序是对上一章的扩展。如果您为 Android 编写 JavaFX 应用程序,请确保希望它在尽可能多的 iOS 设备上运行。本章将为您提供有关 SDK 的基本实践经验和知识,使您能够为 Apple iOS 创建本机应用程序 [第 5 章](5.html#aid-VF2I1 "Chapter 5. Developing a JavaFX Application for iOS")*为 iOS*开发 JavaFX 应用是对上一章的扩展。如果您为 Android 编写 JavaFX 应用,请确保希望它在尽可能多的 iOS 设备上运行。本章将为您提供有关 SDK 的基本实践经验和知识,使您能够为 Apple iOS 创建本机应用
[第 6 章](6.html#aid-12AK81 "Chapter 6. Running JavaFX Applications on the Raspberry Pi")*在 Raspberry Pi*上运行 JavaFX 应用程序,将为您提供开发在信用卡大小的计算机 Raspberry Pi 板上运行的 JavaFX 8 应用程序所需的所有技能和知识。随着物联网(IoT)成为近来的热门话题。Java 是为物联网而设计的。 [第 6 章](6.html#aid-12AK81 "Chapter 6. Running JavaFX Applications on the Raspberry Pi")*在 Raspberry Pi*上运行 JavaFX 应用,将为您提供开发在信用卡大小的计算机 Raspberry Pi 板上运行的 JavaFX 8 应用所需的所有技能和知识。随着物联网(IoT)成为近来的热门话题。Java 是为物联网而设计的。
[第 7 章](7.html#aid-19UOO2 "Chapter 7. Monitoring and Controlling Arduino with JavaFX")*用 JavaFX*监控 Arduino,涵盖了另一种物联网。Arduino 是一个开源电子产品原型平台,提供低成本原型平台,以支持“自己动手”概念和制造商运动。 [第 7 章](7.html#aid-19UOO2 "Chapter 7. Monitoring and Controlling Arduino with JavaFX")*用 JavaFX*监控 Arduino,涵盖了另一种物联网。Arduino 是一个开源电子产品原型平台,提供低成本原型平台,以支持“自己动手”概念和制造商运动。
本章将为您提供所有必要的技能和知识,以便快速使用 JavaFX 和 Arduino 板开发桌面应用程序,以监控来自真实世界的数据或控制真实设备。 本章将为您提供所有必要的技能和知识,以便快速使用 JavaFX 和 Arduino 板开发桌面应用,以监控来自真实世界的数据或控制真实设备。
[第 8 章](8.html#aid-1BRPS2 "Chapter 8. Interactive Leap Motion Apps with JavaFX")*互动跳跃动作应用程序与 JavaFX*将让您了解手势识别。您将发现一个很棒的小工具,Leap Motion 设备,它将允许一种无需触摸的方法来开发增强的 JavaFX 应用程序 [第 8 章](8.html#aid-1BRPS2 "Chapter 8. Interactive Leap Motion Apps with JavaFX")*互动跳跃动作应用与 JavaFX*将让您了解手势识别。您将发现一个很棒的小工具,Leap Motion 设备,它将允许一种无需触摸的方法来开发增强的 JavaFX 应用
机器用户输入界面越来越不以鼠标为中心,支持多点触控甚至无触控输入。如今,手势是人类与机器自然交流的方式之一。 机器用户输入界面越来越不以鼠标为中心,支持多点触控甚至无触控输入。如今,手势是人类与机器自然交流的方式之一。
...@@ -58,9 +58,9 @@ ...@@ -58,9 +58,9 @@
# 这本书是给谁的 # 这本书是给谁的
如果您是 Java 开发人员、经验丰富的 Java Swing、Flash/Flex、SWT 或 web 开发人员,希望将客户端应用程序提升到下一个层次,那么本书适合您。这本书将让你走上正确的道路,开始创建一个奇特的、可定制的、引人注目的用户界面。 如果您是 Java 开发人员、经验丰富的 Java Swing、Flash/Flex、SWT 或 web 开发人员,希望将客户端应用提升到下一个层次,那么本书适合您。这本书将让你走上正确的道路,开始创建一个奇特的、可定制的、引人注目的用户界面。
此外,您还将学习如何快速创建在任何平台上运行的高性能富客户端应用程序,无论是桌面、web、移动还是嵌入式系统,如 Raspberry Pi、Arduino,以及基于无触摸 Leap Motion 的应用程序 此外,您还将学习如何快速创建在任何平台上运行的高性能富客户端应用,无论是桌面、web、移动还是嵌入式系统,如 Raspberry Pi、Arduino,以及基于无触摸 Leap Motion 的应用
这本书是一本快节奏的指南,它将帮助您在利用 JavaFX8、在任何平台上部署和运行的 JavaGUI 编程方面取得领先。 这本书是一本快节奏的指南,它将帮助您在利用 JavaFX8、在任何平台上部署和运行的 JavaGUI 编程方面取得领先。
......
此差异已折叠。
# 第 2 章 JavaFX 8 Essentials 和创建自定义 UI # 二、JavaFX 8 基础和创建自定义 UI
了解 JavaFX 的要点肯定会帮助您轻松构建复杂的 UI 解决方案。 了解 JavaFX 的要点肯定会帮助您轻松构建复杂的 UI 解决方案。
在本章中,您将简要介绍 JavaFX8 体系结构,从而了解 JavaFX 体系结构组件和引擎如何高效地与 JavaFX 应用程序互连并平滑地呈现其图形。 在本章中,您将简要介绍 JavaFX8 体系结构,从而了解 JavaFX 体系结构组件和引擎如何高效地与 JavaFX 应用互连并平滑地呈现其图形。
您将学习如何在 JavaFX 场景中渲染图形,为此,我们将使用场景、一些控件和样式创建一个基本应用程序 您将学习如何在 JavaFX 场景中渲染图形,为此,我们将使用场景、一些控件和样式创建一个基本应用。
我们将讨论 Java SE 8 特性的基本原理(例如**Lambda****功能接口**,以帮助提高代码可读性、质量和生产率。 我们将讨论 Java SE 8 特性的基本原理(例如**Lambda****功能接口**,以帮助提高代码可读性、质量和生产率。
一旦我们有了第一个结构化的 JavaFX8 应用程序,如果您可以在不改变其功能的情况下更改应用程序的 UI,那不是很好吗?通过浏览 JavaFXCSS 样式的基础知识,您将了解主题化。 一旦我们有了第一个结构化的 JavaFX8 应用,如果您可以在不改变其功能的情况下更改应用的 UI,那不是很好吗?通过浏览 JavaFXCSS 样式的基础知识,您将了解主题化。
最后,您将了解如何使用场景生成器以图形方式创建和定义 UI 屏幕,并将其保存为 JavaFXML 格式的文件。您将获得创建*自定义控件*的亲身体验。 最后,您将了解如何使用场景生成器以图形方式创建和定义 UI 屏幕,并将其保存为 JavaFXML 格式的文件。您将获得创建*自定义控件*的亲身体验。
...@@ -17,24 +17,24 @@ ...@@ -17,24 +17,24 @@
* 了解 JavaFX 体系结构组件 * 了解 JavaFX 体系结构组件
* 使用 JavaFX 组件设置 UI * 使用 JavaFX 组件设置 UI
* 使用 JavaSE8、Lambda 表达式和其他功能 * 使用 JavaSE8、Lambda 表达式和其他功能
* 将应用程序主题化以针对不同的平台 * 将应用主题化以针对不同的平台
* 使用 CSS 自定义应用程序 UI * 使用 CSS 自定义应用 UI
* 使用场景生成器工具以可视化方式创建 UI * 使用场景生成器工具以可视化方式创建 UI
* 使用 FXML 构建自定义 UI * 使用 FXML 构建自定义 UI
# 快速回顾 JavaFX8 体系结构 # 快速回顾 JavaFX8 体系结构
为了更好地理解框架的组件和引擎如何相互作用以运行 JavaFX 应用程序,本节对 JavaFX 体系结构和生态系统进行了高层描述。 为了更好地理解框架的组件和引擎如何相互作用以运行 JavaFX 应用,本节对 JavaFX 体系结构和生态系统进行了高层描述。
下图说明了 JavaFX 平台的体系结构组件。它显示每个组件以及它们之间的互连方式。 下图说明了 JavaFX 平台的体系结构组件。它显示每个组件以及它们之间的互连方式。
负责运行 JavaFX 应用程序代码的引擎位于 JavaFX 公共 API 下面。 负责运行 JavaFX 应用代码的引擎位于 JavaFX 公共 API 下面。
该发动机由子部件组成。其中包括 JavaFX 高性能图形引擎**Prism**;玻璃工具箱,一个小型高效的窗口系统;媒体引擎;还有一个网络引擎。 该发动机由子部件组成。其中包括 JavaFX 高性能图形引擎**Prism**;玻璃工具箱,一个小型高效的窗口系统;媒体引擎;还有一个网络引擎。
### 注 ### 注
虽然这些组件不是通过公共 API 公开的,但我们将对它们进行描述,以便您更好地了解是什么使 JavaFX 应用程序以高效的方式成功运行。 虽然这些组件不是通过公共 API 公开的,但我们将对它们进行描述,以便您更好地了解是什么使 JavaFX 应用以高效的方式成功运行。
![Quick review of the JavaFX 8 architecture](img/image00183.jpeg) ![Quick review of the JavaFX 8 architecture](img/image00183.jpeg)
...@@ -44,7 +44,7 @@ JavaFX 体系结构图 ...@@ -44,7 +44,7 @@ JavaFX 体系结构图
## 场景图 ## 场景图
每个应用程序都有一个起始根点来构建 UI 层次结构,JavaFX 应用程序的起始点是*场景图*。在前面的屏幕截图中,它以蓝色显示为顶层的一部分。它是节点的根树,表示应用程序用户界面的所有可视元素。它还跟踪和处理任何用户输入,并且可以呈现,因为它本身就是一个 UI 节点。 每个应用都有一个起始根点来构建 UI 层次结构,JavaFX 应用的起始点是*场景图*。在前面的屏幕截图中,它以蓝色显示为顶层的一部分。它是节点的根树,表示应用用户界面的所有可视元素。它还跟踪和处理任何用户输入,并且可以呈现,因为它本身就是一个 UI 节点。
*节点*是场景图树中的任意单个元素。默认情况下,每个节点都有这些属性–用于标识的 ID、用于更改其视觉属性的样式类列表以及用于与其他组件及其父布局容器节点内的场景正确匹配的边界体积(场景图的根节点除外)。 *节点*是场景图树中的任意单个元素。默认情况下,每个节点都有这些属性–用于标识的 ID、用于更改其视觉属性的样式类列表以及用于与其他组件及其父布局容器节点内的场景正确匹配的边界体积(场景图的根节点除外)。
...@@ -55,7 +55,7 @@ JavaFX 体系结构图 ...@@ -55,7 +55,7 @@ JavaFX 体系结构图
* CPU 加速的二维变换、变换和旋转 * CPU 加速的二维变换、变换和旋转
* 三维变换,例如变换、缩放和旋转 * 三维变换,例如变换、缩放和旋转
* 事件处理程序(例如鼠标事件、按键事件或其他输入方法,例如触摸事件) * 事件处理程序(例如鼠标事件、按键事件或其他输入方法,例如触摸事件)
* 特定于应用程序的状态 * 特定于应用的状态
下图显示了阶段、场景、UI 节点和图形树之间的关系: 下图显示了阶段、场景、UI 节点和图形树之间的关系:
...@@ -71,21 +71,21 @@ JavaFXUI 树层次关系 ...@@ -71,21 +71,21 @@ JavaFXUI 树层次关系
* **节点**:表示为 UI 控件、图表、组、容器、嵌入式 web 浏览器、形状(二维和三维)、图像、媒体和文本的任何节点元素 * **节点**:表示为 UI 控件、图表、组、容器、嵌入式 web 浏览器、形状(二维和三维)、图像、媒体和文本的任何节点元素
* **效果**:这些是简单的对象,当应用于 UI 节点时,会改变其在场景图节点上的外观,例如模糊、阴影和颜色调整 * **效果**:这些是简单的对象,当应用于 UI 节点时,会改变其在场景图节点上的外观,例如模糊、阴影和颜色调整
* **状态**:任何特定于应用程序的状态,如变换(节点的定位和方向)和视觉效果 * **状态**:任何特定于应用的状态,如变换(节点的定位和方向)和视觉效果
## 用于 JavaFX 功能的 Java 公共 API ## 用于 JavaFX 功能的 Java 公共 API
这是您的 Swiss knife toolkit,作为支持富客户机应用程序开发的一整套 Java 公共 API 提供。 这是您的 Swiss knife toolkit,作为支持富客户机应用开发的一整套 Java 公共 API 提供。
这些 API 为您提供了前所未有的灵活性,通过将 Java SE 平台的最佳功能与全面、沉浸式媒体功能结合到手边直观、全面的一站式开发环境中,来构建富客户机 UI 应用程序 这些 API 为您提供了前所未有的灵活性,通过将 Java SE 平台的最佳功能与全面、沉浸式媒体功能结合到手边直观、全面的一站式开发环境中,来构建富客户机 UI 应用。
JavaFX 的这些 Java API 允许您执行以下操作: JavaFX 的这些 Java API 允许您执行以下操作:
* 使用 JavaSE 的强大功能,从泛型、注释和多线程到新的 Lambda 表达式(在 JavaSE8 中引入)。 * 使用 JavaSE 的强大功能,从泛型、注释和多线程到新的 Lambda 表达式(在 JavaSE8 中引入)。
* 为 web 开发人员使用其他基于 JVM 的动态语言(如*JavaScript*)中的 JavaFX 提供了一种更简单的方法。 * 为 web 开发人员使用其他基于 JVM 的动态语言(如*JavaScript*)中的 JavaFX 提供了一种更简单的方法。
* 通过集成其他系统语言,如*Groovy*,编写大型复杂的 JavaFX 应用程序 * 通过集成其他系统语言,如*Groovy*,编写大型复杂的 JavaFX 应用。
* 将 UI 控件绑定到控制器属性,以便自动通知和更新从模型反映到绑定的 UI 节点。绑定包括对高性能延迟绑定、绑定表达式、绑定序列表达式和部分绑定重新评估的支持。我们将在[第 3 章](3.html#aid-PNV62 "Chapter 3. Developing a JavaFX Desktop and Web Application")*开发 JavaFX 桌面和 Web 应用程序*中看到这一点。 * 将 UI 控件绑定到控制器属性,以便自动通知和更新从模型反映到绑定的 UI 节点。绑定包括对高性能延迟绑定、绑定表达式、绑定序列表达式和部分绑定重新评估的支持。我们将在[第 3 章](3.html#aid-PNV62 "Chapter 3. Developing a JavaFX Desktop and Web Application")*开发 JavaFX 桌面和 Web 应用*中看到这一点。
* 引入可观察列表和映射,允许应用程序将 UI 连接到数据模型,以观察这些数据模型中的变化,并通过扩展 Java 集合库相应地更新相应的 UI 控件。 * 引入可观察列表和映射,允许应用将 UI 连接到数据模型,以观察这些数据模型中的变化,并通过扩展 Java 集合库相应地更新相应的 UI 控件。
## 图形系统 ## 图形系统
...@@ -109,7 +109,7 @@ JavaFX 平台有两个图形加速管道,它们实现: ...@@ -109,7 +109,7 @@ JavaFX 平台有两个图形加速管道,它们实现:
通常,系统在任何给定时间运行以下两个或更多线程: 通常,系统在任何给定时间运行以下两个或更多线程:
* **JavaFX 应用程序线程**:这个是 JavaFX 应用程序运行时使用的主线程和主线程。 * **JavaFX 应用线程**:这个是 JavaFX 应用运行时使用的主线程和主线程。
* **Prism 渲染线程**:此独立于事件调度器处理渲染。它在帧 N+1 准备下一个处理时渲染帧 N。它的最大优势是能够执行并发处理,特别是在具有多个处理器的现代系统上。 * **Prism 渲染线程**:此独立于事件调度器处理渲染。它在帧 N+1 准备下一个处理时渲染帧 N。它的最大优势是能够执行并发处理,特别是在具有多个处理器的现代系统上。
* **媒体线程**:此在后台运行,使用 JavaFX 应用线程通过场景图同步最新帧。 * **媒体线程**:此在后台运行,使用 JavaFX 应用线程通过场景图同步最新帧。
* **脉冲**:此使您能够异步处理事件。它可以帮助您管理 JavaFX 场景图元素状态和使用 Prism 引擎的场景图事件之间的同步。激发时,场景图上元素的状态与渲染层同步。 * **脉冲**:此使您能够异步处理事件。它可以帮助您管理 JavaFX 场景图元素状态和使用 Prism 引擎的场景图事件之间的同步。激发时,场景图上元素的状态与渲染层同步。
...@@ -132,9 +132,9 @@ JavaFX`javafx.scene.media`API 提供媒体功能。JavaFX 支持视频和音频 ...@@ -132,9 +132,9 @@ JavaFX`javafx.scene.media`API 提供媒体功能。JavaFX 支持视频和音频
## Web 组件 ## Web 组件
上图中以绿色显示的 web 引擎组件是最重要的 JavaFX UI 控件之一,基于 WebKit 引擎构建,WebKit 引擎是一个开源 web 浏览器引擎,支持 HTML5、JavaScript、CSS、DOM 呈现和 SVG 图形。它通过 API 提供 web 查看器和完整的浏览功能。在开发 Web 应用程序时,我们将在[第 3 章](3.html#aid-PNV62 "Chapter 3. Developing a JavaFX Desktop and Web Application")*开发 JavaFX 桌面和 Web 应用程序*中深入探讨这一点。 上图中以绿色显示的 web 引擎组件是最重要的 JavaFX UI 控件之一,基于 WebKit 引擎构建,WebKit 引擎是一个开源 web 浏览器引擎,支持 HTML5、JavaScript、CSS、DOM 呈现和 SVG 图形。它通过 API 提供 web 查看器和完整的浏览功能。在开发 Web 应用时,我们将在[第 3 章](3.html#aid-PNV62 "Chapter 3. Developing a JavaFX Desktop and Web Application")*开发 JavaFX 桌面和 Web 应用*中深入探讨这一点。
它允许您在 Java 应用程序中添加和实现以下功能: 它允许您在 Java 应用中添加和实现以下功能:
* 从本地或远程 URL 呈现任何 HTML 内容 * 从本地或远程 URL 呈现任何 HTML 内容
* 提供前后导航,并支持历史记录 * 提供前后导航,并支持历史记录
...@@ -145,7 +145,7 @@ JavaFX`javafx.scene.media`API 提供媒体功能。JavaFX 支持视频和音频 ...@@ -145,7 +145,7 @@ JavaFX`javafx.scene.media`API 提供媒体功能。JavaFX 支持视频和音频
## 布局组件 ## 布局组件
当构建一个丰富而复杂的 UI 时,我们需要一种方法来允许 JavaFX 应用程序中 UI 控件的灵活和动态安排。这是使用布局容器或窗格的最佳位置。 当构建一个丰富而复杂的 UI 时,我们需要一种方法来允许 JavaFX 应用中 UI 控件的灵活和动态安排。这是使用布局容器或窗格的最佳位置。
布局 API 包括以下自动化常见布局 UI 模式的容器类: 布局 API 包括以下自动化常见布局 UI 模式的容器类:
...@@ -160,7 +160,7 @@ JavaFX`javafx.scene.media`API 提供媒体功能。JavaFX 支持视频和音频 ...@@ -160,7 +160,7 @@ JavaFX`javafx.scene.media`API 提供媒体功能。JavaFX 支持视频和音频
### 提示 ### 提示
不同的容器可以嵌套在 JavaFX 应用程序中;为了实现所需的布局结构,我们将在接下来开发自定义 UI 时看到这一点。 不同的容器可以嵌套在 JavaFX 应用中;为了实现所需的布局结构,我们将在接下来开发自定义 UI 时看到这一点。
## JavaFX 控件 ## JavaFX 控件
...@@ -270,15 +270,15 @@ Rectangle perimeter: 18.0 cm. ...@@ -270,15 +270,15 @@ Rectangle perimeter: 18.0 cm.
# 主题化 # 主题化
当与设计师和 UX/UI 专家合作时,您将听到应用程序蒙皮或更改其外观。这两个术语通常是可互换的,它们都反映了*主题化*的基本概念。 当与设计师和 UX/UI 专家合作时,您将听到应用蒙皮或更改其外观。这两个术语通常是可互换的,它们都反映了*主题化*的基本概念。
主题化的思想是通过改变其控件外观而不改变其底层功能来改变整个应用程序样式。 主题化的思想是通过改变其控件外观而不改变其底层功能来改变整个应用样式。
在 JavaFX 中,您可以创建、修改或使用现有主题来对应用程序、场景甚至只是 UI 控件进行蒙皮。 在 JavaFX 中,您可以创建、修改或使用现有主题来对应用、场景甚至只是 UI 控件进行蒙皮。
## CSS ## CSS
JavaFX**级联样式表****CSS**可应用于 JavaFX 场景图中的任意节点;它们以异步方式应用于节点。还可以在运行时轻松地将样式指定给场景,从而允许应用程序的外观动态更改。 JavaFX**级联样式表****CSS**可应用于 JavaFX 场景图中的任意节点;它们以异步方式应用于节点。还可以在运行时轻松地将样式指定给场景,从而允许应用的外观动态更改。
它基于 W3CCSS 版本 2.1 规范,目前与当前版本 3 工作中的一些新增内容兼容。JavaFXCSS 支持和扩展被设计为允许任何兼容的 CSS 解析器干净地解析 JavaFXCSS 样式表。这允许将 JavaFX 和其他用途(如 HTML 页面)的 CSS 样式混合到单个样式表中。 它基于 W3CCSS 版本 2.1 规范,目前与当前版本 3 工作中的一些新增内容兼容。JavaFXCSS 支持和扩展被设计为允许任何兼容的 CSS 解析器干净地解析 JavaFXCSS 样式表。这允许将 JavaFX 和其他用途(如 HTML 页面)的 CSS 样式混合到单个样式表中。
...@@ -286,7 +286,7 @@ JavaFX**级联样式表**(**CSS**可应用于 JavaFX 场景图中的任意节 ...@@ -286,7 +286,7 @@ JavaFX**级联样式表**(**CSS**可应用于 JavaFX 场景图中的任意节
### 注 ### 注
有关 JavaFXCSS 的更多信息,请参阅[上的带 CSS 的 JavaFX 应用程序蒙皮文档和参考指南 http://docs.oracle.com/javase/8/javafx/api/javafx/scene/doc-files/cssref.html](http://docs.oracle.com/javase/8/javafx/api/javafx/scene/doc-files/cssref.html) 有关 JavaFXCSS 的更多信息,请参阅[上的带 CSS 的 JavaFX 应用蒙皮文档和参考指南 http://docs.oracle.com/javase/8/javafx/api/javafx/scene/doc-files/cssref.html](http://docs.oracle.com/javase/8/javafx/api/javafx/scene/doc-files/cssref.html)
### 应用 CSS 主题 ### 应用 CSS 主题
...@@ -303,7 +303,7 @@ JavaFX**级联样式表**(**CSS**可应用于 JavaFX 场景图中的任意节 ...@@ -303,7 +303,7 @@ JavaFX**级联样式表**(**CSS**可应用于 JavaFX 场景图中的任意节
} }
``` ```
我们有两种方法可以应用 CSS 样式表来更改 JavaFX 应用程序的外观主题: 我们有两种方法可以应用 CSS 样式表来更改 JavaFX 应用的外观主题:
1. Using a JavaFX Application (`javafx.application.Application`) class static method `setUserAgentStylesheet(String URL)` method, which styles all the application hierarchy, including every scene and all child nodes in a JavaFX application. It is used as follows: 1. Using a JavaFX Application (`javafx.application.Application`) class static method `setUserAgentStylesheet(String URL)` method, which styles all the application hierarchy, including every scene and all child nodes in a JavaFX application. It is used as follows:
...@@ -345,13 +345,13 @@ JavaFX CSS 实现应用以下优先顺序–来自用户代理样式表的样式 ...@@ -345,13 +345,13 @@ JavaFX CSS 实现应用以下优先顺序–来自用户代理样式表的样式
# 场景生成器 # 场景生成器
对于最复杂的和复杂的 UI 需求,设计师使用工具设计他们的 UI 时不需要编写任何代码,然后将结果(`FXML`文件)加载到他们的 JavaFX 应用程序逻辑中,不是更容易吗? 对于最复杂的和复杂的 UI 需求,设计师使用工具设计他们的 UI 时不需要编写任何代码,然后将结果(`FXML`文件)加载到他们的 JavaFX 应用逻辑中,不是更容易吗?
因此,您需要 JavaFX 场景生成器;它是一个可视化布局工具,允许您轻松地布局 UI 控件,以便您可以使用效果和动画快速创建应用程序原型。场景生成器(版本 2.0 以上)是 JavaFX8 的兼容版本。 因此,您需要 JavaFX 场景生成器;它是一个可视化布局工具,允许您轻松地布局 UI 控件,以便您可以使用效果和动画快速创建应用原型。场景生成器(版本 2.0 以上)是 JavaFX8 的兼容版本。
在创建项目期间的任何时候,您都可以预览工作,以在部署工作之前检查其真实外观。 在创建项目期间的任何时候,您都可以预览工作,以在部署工作之前检查其真实外观。
它是开源的,因此与大多数 IDE 集成,但与 NetBeans IDE 的集成更紧密。它也是一个跨平台、自包含的应用程序,在大多数平台上运行。 它是开源的,因此与大多数 IDE 集成,但与 NetBeans IDE 的集成更紧密。它也是一个跨平台、自包含的应用,在大多数平台上运行。
除了支持 CSS,它还允许您轻松地将自定义主题应用于原型。 除了支持 CSS,它还允许您轻松地将自定义主题应用于原型。
...@@ -373,11 +373,11 @@ JavaFX8 场景生成器工具。 ...@@ -373,11 +373,11 @@ JavaFX8 场景生成器工具。
## FXML ## FXML
当添加组件并构建漂亮的 UI 布局时,Scene Builder under the hood 会自动为您生成一个基于 FXML 和 XML 的标记文件,稍后将用于将 UI 绑定到 Java 应用程序逻辑。 当添加组件并构建漂亮的 UI 布局时,Scene Builder under the hood 会自动为您生成一个基于 FXML 和 XML 的标记文件,稍后将用于将 UI 绑定到 Java 应用逻辑。
FXML 提供的主要优势之一是分离关注点,因为它将 UI 层(*视图*与逻辑(*控制器*分离);这意味着您可以随时更改 UI,而无需更改底层逻辑。由于没有编译 FXML 文件,因此可以在运行时动态加载它,而无需进行任何必要的编译。这意味着它可以帮助您快速成型。 FXML 提供的主要优势之一是分离关注点,因为它将 UI 层(*视图*与逻辑(*控制器*分离);这意味着您可以随时更改 UI,而无需更改底层逻辑。由于没有编译 FXML 文件,因此可以在运行时动态加载它,而无需进行任何必要的编译。这意味着它可以帮助您快速成型。
### 将 FXML 加载到 JavaFX 应用程序 ### 将 FXML 加载到 JavaFX 应用中
从 Scene Builder 工具生成 UI 设计后,添加它是一项非常简单的任务。这里显示的是以`start()`方法加载 FXML 文件的代码: 从 Scene Builder 工具生成 UI 设计后,添加它是一项非常简单的任务。这里显示的是以`start()`方法加载 FXML 文件的代码:
...@@ -397,7 +397,7 @@ root.setCenter(content); ...@@ -397,7 +397,7 @@ root.setCenter(content);
## 登录对话框自定义界面 ## 登录对话框自定义界面
我们将使用之前介绍的大多数工具和技术来开发我们的自定义 UI:登录对话框,它是每个企业应用程序中的必要组件。我们的 UI 组件将如以下屏幕截图所示: 我们将使用之前介绍的大多数工具和技术来开发我们的自定义 UI:登录对话框,它是每个企业应用中的必要组件。我们的 UI 组件将如以下屏幕截图所示:
![The Login dialog custom UI](img/image00188.jpeg) ![The Login dialog custom UI](img/image00188.jpeg)
...@@ -414,7 +414,7 @@ root.setCenter(content); ...@@ -414,7 +414,7 @@ root.setCenter(content);
* 创建一个初始化方法,确保所有 FXML 控件都已成功初始化和加载 * 创建一个初始化方法,确保所有 FXML 控件都已成功初始化和加载
* 公开公共属性以获取和设置需要实现逻辑的控制数据和操作方法 * 公开公共属性以获取和设置需要实现逻辑的控制数据和操作方法
* 开发一个单独的 CSS 文件 * 开发一个单独的 CSS 文件
* 在应用程序中使用自定义组件 * 在应用中使用自定义组件
### 对登录对话框自定义界面进行编码 ### 对登录对话框自定义界面进行编码
...@@ -456,7 +456,7 @@ root.setCenter(content); ...@@ -456,7 +456,7 @@ root.setCenter(content);
### 注 ### 注
确保在运行项目之前*清理并构建*项目,以避免可能遇到的任何问题,尤其是在运行应用程序时,在运行期间加载`*.fxml`文件可能会返回`null`。 确保在运行项目之前*清理并构建*项目,以避免可能遇到的任何问题,尤其是在运行应用时,在运行期间加载`*.fxml`文件可能会返回`null`。
7. 转到场景生成器工具,从**视图**中选择**显示示例控制器骨架**。下面屏幕截图中显示的窗口将打开,我们将复制该窗口以替换`LoginUIController.java`(这将用 NetBeans 中复制的内容扩展`Pane`类内容代码),然后修复丢失的导入。 7. 转到场景生成器工具,从**视图**中选择**显示示例控制器骨架**。下面屏幕截图中显示的窗口将打开,我们将复制该窗口以替换`LoginUIController.java`(这将用 NetBeans 中复制的内容扩展`Pane`类内容代码),然后修复丢失的导入。
8. 将先前从场景生成器生成并保存的`LoginUI.fxml`文件替换为 NetBeans 已经创建的文件。 8. 将先前从场景生成器生成并保存的`LoginUI.fxml`文件替换为 NetBeans 已经创建的文件。
...@@ -504,10 +504,10 @@ root.setCenter(content); ...@@ -504,10 +504,10 @@ root.setCenter(content);
# 总结 # 总结
水果挞 java 的 8 个体系结构组件作为基础层,可以顺利高效地运行 java 应用程序。然后,我们探索了如何在场景中渲染图形,并简要介绍了最常见的布局和 UI 控件。 水果挞 java 的 8 个体系结构组件作为基础层,可以顺利高效地运行 java 应用。然后,我们探索了如何在场景中渲染图形,并简要介绍了最常见的布局和 UI 控件。
我们向您介绍了 JavaSE8 中的新特性,如 lambda 表达式和函数接口,并通过示例展示了它们的强大功能。 我们向您介绍了 JavaSE8 中的新特性,如 lambda 表达式和函数接口,并通过示例展示了它们的强大功能。
通过使用`setUserAgentStylesheet(String URL)``getStylesheets().add(String URL)`方法,您了解了如何使用自定义 CSS 文件为应用程序设置样式。接下来,您简要介绍了场景生成器以及如何将 FXML 加载到场景中。最后,您了解了 JavaFX 中的自定义 UI 组件以及如何创建它们。 通过使用`setUserAgentStylesheet(String URL)``getStylesheets().add(String URL)`方法,您了解了如何使用自定义 CSS 文件为应用设置样式。接下来,您简要介绍了场景生成器以及如何将 FXML 加载到场景中。最后,您了解了 JavaFX 中的自定义 UI 组件以及如何创建它们。
在下一章中,您将学习如何创建由多个场景组成的桌面应用程序,以及如何对其进行打包。此外,我们将学习如何与 Web 交互,以及如何使用 JavaFX8 开发 Web 应用程序。* 在下一章中,您将学习如何创建由多个场景组成的桌面应用,以及如何对其进行打包。此外,我们将学习如何与 Web 交互,以及如何使用 JavaFX8 开发 Web 应用。*
\ No newline at end of file \ No newline at end of file
此差异已折叠。
此差异已折叠。
# 第五章,为 iOS 开发 JavaFX 应用程序 # 五、为 iOS 开发 JavaFX 应用
苹果在手机和 PC/笔记本电脑领域拥有巨大的市场份额,拥有许多不同的设备,从 iPhone 等手机到 iPod 等音乐设备和 iPad 等平板电脑。 苹果在手机和 PC/笔记本电脑领域拥有巨大的市场份额,拥有许多不同的设备,从 iPhone 等手机到 iPod 等音乐设备和 iPad 等平板电脑。
它有一个快速增长的应用程序市场,称为 Apple Store,服务于其社区,可用应用程序的数量每天都在增加。移动应用程序开发人员应该为这样的市场做好准备。 它有一个快速增长的应用市场,称为 Apple Store,服务于其社区,可用应用的数量每天都在增加。移动应用开发人员应该为这样的市场做好准备。
同时面向 iOS 和 Android 的移动应用程序开发人员面临许多挑战。通过比较这两个平台的本机开发环境,您会发现它们有很大的不同。 同时面向 iOS 和 Android 的移动应用开发人员面临许多挑战。通过比较这两个平台的本机开发环境,您会发现它们有很大的不同。
苹果称,iOS 开发基于**Xcode IDE(**[)https://developer.apple.com/xcode/](https://developer.apple.com/xcode/) **及其编程语言。传统上,它是**Objective-C**,2014 年 6 月,苹果推出了**Swift**([https://developer.apple.com/swift/](https://developer.apple.com/swift/) ;另一方面,谷歌定义的*Android*开发基于 Intellij IDEA 和 Java 编程语言。** 苹果称,iOS 开发基于**Xcode IDE(**[)https://developer.apple.com/xcode/](https://developer.apple.com/xcode/) **及其编程语言。传统上,它是**Objective-C**,2014 年 6 月,苹果推出了**Swift**([https://developer.apple.com/swift/](https://developer.apple.com/swift/) ;另一方面,谷歌定义的*Android*开发基于 Intellij IDEA 和 Java 编程语言。**
**没有多少开发人员精通这两种环境。此外,这些差异排除了平台之间的任何代码重用。 **没有多少开发人员精通这两种环境。此外,这些差异排除了平台之间的任何代码重用。
正如我们将在本章中看到的,JavaFX8 通过在两个平台上共享相同的应用程序,填补了平台间可重用代码的空白。 正如我们将在本章中看到的,JavaFX8 通过在两个平台上共享相同的应用,填补了平台间可重用代码的空白。
以下是本章结束时您将获得的一些技能: 以下是本章结束时您将获得的一些技能:
* 安装和配置 iOS 环境工具和软件 * 安装和配置 iOS 环境工具和软件
* 创建 iOS JavaFX 8 应用程序 * 创建 iOS JavaFX 8 应用
* 模拟和调试 JavaFX 移动应用程序 * 模拟和调试 JavaFX 移动应用
* 在 iOS 移动设备上打包和部署应用程序 * 在 iOS 移动设备上打包和部署应用
# 使用 RoboVM 在 iOS 上运行 JavaFX # 使用 RoboVM 在 iOS 上运行 JavaFX
**RoboVM**是从 Java 到 Objective-C 的桥梁。使用它,开发将在基于 iOS 的设备上运行的 JavaFX 8 应用程序变得很容易,因为**RoboVM**项目的最终目标是在不损害开发人员体验或应用程序用户体验的情况下解决这个问题。 **RoboVM**是从 Java 到 Objective-C 的桥梁。使用它,开发将在基于 iOS 的设备上运行的 JavaFX 8 应用变得很容易,因为**RoboVM**项目的最终目标是在不损害开发人员体验或应用用户体验的情况下解决这个问题。
正如我们在前面关于 Android 的章节中所看到的,由于 Android 基于 Java 和**Dalvik VM**,因此使用*JavaFXPorts*生成 APK 是一项相对简单的任务。 正如我们在前面关于 Android 的章节中所看到的,由于 Android 基于 Java 和**Dalvik VM**,因此使用*JavaFXPorts*生成 APK 是一项相对简单的任务。
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
* 主要目标是 iOS 和 ARM 处理器(32 位和 64 位),但也支持运行在 x86 CPU 上的 Mac OS X 和 Linux(32 位和 64 位) * 主要目标是 iOS 和 ARM 处理器(32 位和 64 位),但也支持运行在 x86 CPU 上的 Mac OS X 和 Linux(32 位和 64 位)
* 不会对开发人员可访问的 Java 平台功能(如反射或文件 I/O)施加任何限制 * 不会对开发人员可访问的 Java 平台功能(如反射或文件 I/O)施加任何限制
* 支持标准 JAR 文件,使开发人员能够重用第三方 Java 库的庞大生态系统 * 支持标准 JAR 文件,使开发人员能够重用第三方 Java 库的庞大生态系统
* 通过 Java-to-Objective-C 桥接器提供对完整本机 iOS API 的访问,支持使用真正的本机 UI 和完整的硬件访问开发应用程序 * 通过 Java-to-Objective-C 桥接器提供对完整本机 iOS API 的访问,支持使用真正的本机 UI 和完整的硬件访问开发应用
* 与最流行的工具集成,如 NetBeans、Eclipse、Intellij IDEA、Maven 和 Gradle * 与最流行的工具集成,如 NetBeans、Eclipse、Intellij IDEA、Maven 和 Gradle
* 应用商店就绪,商店中已有数百个应用 * 应用商店就绪,商店中已有数百个应用
...@@ -46,8 +46,8 @@ ...@@ -46,8 +46,8 @@
主要由于 iOS 平台的限制,使用 RoboVM 时有一些限制: 主要由于 iOS 平台的限制,使用 RoboVM 时有一些限制:
* 不支持在运行时加载自定义字节码。构成应用程序的所有类文件必须在编译时在开发人员机器上可用。 * 不支持在运行时加载自定义字节码。构成应用的所有类文件必须在编译时在开发人员机器上可用。
* 桌面或服务器上使用的 Java 本机接口技术通常从动态库加载本机代码,但苹果不允许在 iOS 应用程序中附带自定义动态库。RoboVM 支持基于静态库的 JNI 变体。 * 桌面或服务器上使用的 Java 本机接口技术通常从动态库加载本机代码,但苹果不允许在 iOS 应用中附带自定义动态库。RoboVM 支持基于静态库的 JNI 变体。
* 另一个很大的限制是 RoboVM 是一个正在开发的阿尔法州项目,尚未推荐用于生产。 * 另一个很大的限制是 RoboVM 是一个正在开发的阿尔法州项目,尚未推荐用于生产。
### 注 ### 注
...@@ -56,24 +56,24 @@ RoboVM 完全支持反射。 ...@@ -56,24 +56,24 @@ RoboVM 完全支持反射。
## 它是如何工作的 ## 它是如何工作的
正如[第 4 章](4.html#aid-SJGS1 "Chapter 4. Developing a JavaFX Application for Android")中提到的*为 Android 开发 JavaFX 应用程序*,自 2015 年 2 月以来,RoboVM 和 JavaFXPorts 背后的公司已经达成协议,现在一个名为 jfxmobile plugin 的插件允许我们为三个平台构建应用程序:桌面、Android、,和来自同一代码库的 iOS。 正如[第 4 章](4.html#aid-SJGS1 "Chapter 4. Developing a JavaFX Application for Android")中提到的*为 Android 开发 JavaFX 应用*,自 2015 年 2 月以来,RoboVM 和 JavaFXPorts 背后的公司已经达成协议,现在一个名为 jfxmobile plugin 的插件允许我们为三个平台构建应用:桌面、Android、,和来自同一代码库的 iOS。
JavaFXMobile 插件向 Java 应用程序添加了许多任务,允许您创建可提交到 Apple Store 的.ipa 包。 JavaFXMobile 插件向 Java 应用添加了许多任务,允许您创建可提交到 Apple Store 的.ipa 包。
Android 主要使用 Java 作为主要开发语言,因此很容易将 JavaFX8 代码与之合并。在 iOS 上,情况在内部完全不同,但具有相似的 Gradle 命令。 Android 主要使用 Java 作为主要开发语言,因此很容易将 JavaFX8 代码与之合并。在 iOS 上,情况在内部完全不同,但具有相似的 Gradle 命令。
插件将下载并安装 RoboVM 编译器,并使用 RoboVM 编译器命令在`build/javafxports/ios`中创建 iOS 应用程序 插件将下载并安装 RoboVM 编译器,并使用 RoboVM 编译器命令在`build/javafxports/ios`中创建 iOS 应用。
# 开始 # 开始
在本节中,您将学习如何使用`JavaFXMobile`插件安装 RoboVM 编译器,并通过重用相同的应用程序(电话拨号版本 1.0)确保工具链正常工作,我们之前在[第 4 章](4.html#aid-SJGS1 "Chapter 4. Developing a JavaFX Application for Android")*中为安卓平台开发了用于安卓的 JavaFX 应用程序* 在本节中,您将学习如何使用`JavaFXMobile`插件安装 RoboVM 编译器,并通过重用相同的应用(电话拨号版本 1.0)确保工具链正常工作,我们之前在[第 4 章](4.html#aid-SJGS1 "Chapter 4. Developing a JavaFX Application for Android")*中为安卓平台开发了用于安卓的 JavaFX 应用*
## 先决条件 ## 先决条件
为了使用 RoboVM 编译器构建 iOS 应用程序,需要以下工具: 为了使用 RoboVM 编译器构建 iOS 应用,需要以下工具:
* Oracle 的 JavaSEJDK8 更新 45。请参阅[第 1 章](1.html#aid-DB7S1 "Chapter 1. Getting Started with JavaFX 8")*JavaFX8 入门**安装 JavaSE8JDK*一节。 * Oracle 的 JavaSEJDK8 更新 45。请参阅[第 1 章](1.html#aid-DB7S1 "Chapter 1. Getting Started with JavaFX 8")*JavaFX8 入门**安装 JavaSE8JDK*一节。
* 使用`jfxmobile`插件构建应用程序需要 Gradle 2.4 或更高版本。请参阅[第 4 章](4.html#aid-SJGS1 "Chapter 4. Developing a JavaFX Application for Android")*为 Android 开发 JavaFX 应用程序*、安装*Gradle 2.4*一节。 * 使用`jfxmobile`插件构建应用需要 Gradle 2.4 或更高版本。请参阅[第 4 章](4.html#aid-SJGS1 "Chapter 4. Developing a JavaFX Application for Android")*为 Android 开发 JavaFX 应用*、安装*Gradle 2.4*一节。
* 运行**Mac OS X**10.9 或更高版本的 Mac。 * 运行**Mac OS X**10.9 或更高版本的 Mac。
* 来自 Mac 应用商店([的 Xcode 6.xhttps://itunes.apple.com/us/app/xcode/id497799835?mt=12](https://itunes.apple.com/us/app/xcode/id497799835?mt=12) * 来自 Mac 应用商店([的 Xcode 6.xhttps://itunes.apple.com/us/app/xcode/id497799835?mt=12](https://itunes.apple.com/us/app/xcode/id497799835?mt=12)
...@@ -83,21 +83,21 @@ Android 主要使用 Java 作为主要开发语言,因此很容易将 JavaFX8 ...@@ -83,21 +83,21 @@ Android 主要使用 Java 作为主要开发语言,因此很容易将 JavaFX8
## 为 iOS 准备项目 ## 为 iOS 准备项目
我们将重用之前在[第 4 章](4.html#aid-SJGS1 "Chapter 4. Developing a JavaFX Application for Android")*中为 Android*开发 JavaFX 应用程序时为 Android 平台开发的项目,因为针对 iOS 的代码、项目结构或渐变构建脚本没有差异。 我们将重用之前在[第 4 章](4.html#aid-SJGS1 "Chapter 4. Developing a JavaFX Application for Android")*中为 Android*开发 JavaFX 应用时为 Android 平台开发的项目,因为针对 iOS 的代码、项目结构或渐变构建脚本没有差异。
它们共享相同的属性和功能,但使用不同的 Gradle 命令来为 iOS 开发服务,并对 RoboVM 编译器的 Gradle 构建脚本进行了细微更改。 它们共享相同的属性和功能,但使用不同的 Gradle 命令来为 iOS 开发服务,并对 RoboVM 编译器的 Gradle 构建脚本进行了细微更改。
因此,我们将看到**WORA***写一次,到处运行*的威力,使用相同的应用程序 因此,我们将看到**WORA***写一次,到处运行*的威力,使用相同的应用。
### 项目结构 ### 项目结构
基于[第 4 章](4.html#aid-SJGS1 "Chapter 4. Developing a JavaFX Application for Android")*中的安卓实例相同的项目结构,开发安卓*的 JavaFX 应用程序,我们的 iOS 应用程序的项目结构应该如下图所示: 基于[第 4 章](4.html#aid-SJGS1 "Chapter 4. Developing a JavaFX Application for Android")*中的安卓实例相同的项目结构,开发安卓*的 JavaFX 应用,我们的 iOS 应用的项目结构应该如下图所示:
![Project structure](img/image00218.jpeg) ![Project structure](img/image00218.jpeg)
### 申请 ### 申请
我们将重用[第 4 章](4.html#aid-SJGS1 "Chapter 4. Developing a JavaFX Application for Android")中的相同应用程序*为 Android 开发 JavaFX 应用程序*:手机拨号板版本 2.0 JavaFX 8 应用程序 我们将重用[第 4 章](4.html#aid-SJGS1 "Chapter 4. Developing a JavaFX Application for Android")中的相同应用*为 Android 开发 JavaFX 应用*:手机拨号板版本 2.0 JavaFX 8 应用
![The application](img/image00219.jpeg) ![The application](img/image00219.jpeg)
...@@ -105,7 +105,7 @@ Android 主要使用 Java 作为主要开发语言,因此很容易将 JavaFX8 ...@@ -105,7 +105,7 @@ Android 主要使用 Java 作为主要开发语言,因此很容易将 JavaFX8
#### 与低级 iOS API 的互操作性 #### 与低级 iOS API 的互操作性
为了使从我们的应用程序中本机调用默认 iOS 电话拨号器的功能与 Android 相同,我们必须为 iOS 提供本机解决方案,如下`IosPlatform`实现: 为了使从我们的应用中本机调用默认 iOS 电话拨号器的功能与 Android 相同,我们必须为 iOS 提供本机解决方案,如下`IosPlatform`实现:
```java ```java
import org.robovm.apple.foundation.NSURL; import org.robovm.apple.foundation.NSURL;
...@@ -126,7 +126,7 @@ public class IosPlatform implements Platform { ...@@ -126,7 +126,7 @@ public class IosPlatform implements Platform {
### 渐变生成文件 ### 渐变生成文件
我们将使用与[第 4 章](4.html#aid-SJGS1 "Chapter 4. Developing a JavaFX Application for Android")中使用的相同的 Gradle 构建脚本文件,*为 Android*开发 JavaFX 应用程序,但在脚本末尾添加了以下几行,这是一个小改动: 我们将使用与[第 4 章](4.html#aid-SJGS1 "Chapter 4. Developing a JavaFX Application for Android")中使用的相同的 Gradle 构建脚本文件,*为 Android*开发 JavaFX 应用,但在脚本末尾添加了以下几行,这是一个小改动:
```java ```java
jfxmobile { jfxmobile {
...@@ -141,13 +141,13 @@ jfxmobile { ...@@ -141,13 +141,13 @@ jfxmobile {
安装和使用`robovm`编译器所涉及的所有工作都由`jfxmobile`插件完成。 安装和使用`robovm`编译器所涉及的所有工作都由`jfxmobile`插件完成。
这些行的目的是为 RoboVM 编译器提供必须在运行时加载的主应用程序类的位置,因为它在默认情况下对编译器不可见。 这些行的目的是为 RoboVM 编译器提供必须在运行时加载的主应用类的位置,因为它在默认情况下对编译器不可见。
`forceLinkClasses`属性确保在 RoboVM 编译期间链接这些类。 `forceLinkClasses`属性确保在 RoboVM 编译期间链接这些类。
#### 构建应用程序 #### 构建应用
在之后,我们添加了必要的配置集来构建 iOS 脚本,现在是构建应用程序的时候了,以便将其部署到不同的 iOS 目标设备。为此,我们必须运行以下命令: 在之后,我们添加了必要的配置集来构建 iOS 脚本,现在是构建应用的时候了,以便将其部署到不同的 iOS 目标设备。为此,我们必须运行以下命令:
```java ```java
$ gradle build $ gradle build
...@@ -162,11 +162,11 @@ BUILD SUCCESSFUL ...@@ -162,11 +162,11 @@ BUILD SUCCESSFUL
Total time: 44.74 secs Total time: 44.74 secs
``` ```
我们已经成功构建了我们的应用程序;接下来,我们需要生成。`ipa`在生产环境中,您必须通过将其部署到尽可能多的 iOS 版本来测试它。 我们已经成功构建了我们的应用;接下来,我们需要生成。`ipa`在生产环境中,您必须通过将其部署到尽可能多的 iOS 版本来测试它。
#### 生成 iOS.ipa 包文件 #### 生成 iOS.ipa 包文件
为了为我们的 JavaFX 8 应用程序生成最终的.ipa iOS 包,这是最终分发到任何设备或 AppStore 所必需的,您必须运行以下`gradle`命令: 为了为我们的 JavaFX 8 应用生成最终的.ipa iOS 包,这是最终分发到任何设备或 AppStore 所必需的,您必须运行以下`gradle`命令:
```java ```java
gradle ios gradle ios
...@@ -175,28 +175,28 @@ gradle ios ...@@ -175,28 +175,28 @@ gradle ios
这将生成新的。目录`build/javafxports/ios`中的`ipa`文件。 这将生成新的。目录`build/javafxports/ios`中的`ipa`文件。
### 部署应用程序 ### 部署应用
在开发期间,我们需要在 iOS 模拟器上检查我们的应用程序 GUI 和最终应用程序原型,并测量不同设备上的应用程序性能和功能。这些程序非常有用,特别是对于测试人员。 在开发期间,我们需要在 iOS 模拟器上检查我们的应用 GUI 和最终应用原型,并测量不同设备上的应用性能和功能。这些程序非常有用,特别是对于测试人员。
让我们看看在模拟器或真实设备上运行应用程序是多么容易。 让我们看看在模拟器或真实设备上运行应用是多么容易。
#### 部署到模拟器上 #### 部署到模拟器上
在模拟器上,只需运行以下命令即可检查应用程序是否正在运行: 在模拟器上,只需运行以下命令即可检查应用是否正在运行:
```java ```java
$ gradle launchIPhoneSimulator $ gradle launchIPhoneSimulator
``` ```
此命令将在*iPhone 模拟器*中打包并启动应用程序,如下图所示: 此命令将在*iPhone 模拟器*中打包并启动应用,如下图所示:
![Deploying to a simulator](img/image00220.jpeg) ![Deploying to a simulator](img/image00220.jpeg)
在 iOS 8.3/iPhone 4s 模拟器上运行的 DialPad2 JavaFX 8 应用程序 在 iOS 8.3/iPhone 4s 模拟器上运行的 DialPad2 JavaFX 8 应用
此命令将在 iPad 模拟器中启动应用程序 此命令将在 iPad 模拟器中启动应用:
```java ```java
$ gradle launchIPadSimulator $ gradle launchIPadSimulator
...@@ -205,16 +205,16 @@ $ gradle launchIPadSimulator ...@@ -205,16 +205,16 @@ $ gradle launchIPadSimulator
#### 部署到 Apple 设备 #### 部署到 Apple 设备
为了打包 JavaFX 8 应用程序并将其部署到 Apple 设备,只需运行以下命令: 为了打包 JavaFX 8 应用并将其部署到 Apple 设备,只需运行以下命令:
```java ```java
$ gradle launchIOSDevice $ gradle launchIOSDevice
``` ```
此命令将在连接到台式机/笔记本电脑的设备中启动 JavaFX 8 应用程序 此命令将在连接到台式机/笔记本电脑的设备中启动 JavaFX 8 应用。
然后,在设备上启动应用程序后,键入任意号码,然后点击 Call。 然后,在设备上启动应用后,键入任意号码,然后点击 Call。
iPhone 将请求使用默认移动拨号器拨号的许可;点击**Ok**。将启动默认的移动拨号程序,并显示如下图所示的号码: iPhone 将请求使用默认移动拨号器拨号的许可;点击**Ok**。将启动默认的移动拨号程序,并显示如下图所示的号码:
...@@ -224,18 +224,18 @@ iPhone 将请求使用默认移动拨号器拨号的许可;点击**Ok**。将 ...@@ -224,18 +224,18 @@ iPhone 将请求使用默认移动拨号器拨号的许可;点击**Ok**。将
### 注 ### 注
为了能够在您的设备上测试和部署您的应用程序,您将需要 Apple Developer 程序的活动订阅。访问苹果开发者门户网站[https://developer.apple.com/register/index.action](https://developer.apple.com/register/index.action) 注册。您还需要为开发提供设备。您可以在 Apple Developer Portal 中找到有关设备配置的信息,或遵循以下指南:[http://www.bignerdranch.com/we-teach/how-to-prepare/ios-device-provisioning/](http://www.bignerdranch.com/we-teach/how-to-prepare/ios-device-provisioning/) 为了能够在您的设备上测试和部署您的应用,您将需要 Apple Developer 程序的活动订阅。访问苹果开发者门户网站[https://developer.apple.com/register/index.action](https://developer.apple.com/register/index.action) 注册。您还需要为开发提供设备。您可以在 Apple Developer Portal 中找到有关设备配置的信息,或遵循以下指南:[http://www.bignerdranch.com/we-teach/how-to-prepare/ios-device-provisioning/](http://www.bignerdranch.com/we-teach/how-to-prepare/ios-device-provisioning/)
# 总结 # 总结
本章让我们很好地理解了如何使用 RoboVM for**iOS**开发和定制基于 JavaFX 的应用程序,从而使您的应用程序能够在苹果平台上运行。 本章让我们很好地理解了如何使用 RoboVM for**iOS**开发和定制基于 JavaFX 的应用,从而使您的应用能够在苹果平台上运行。
您了解了 RoboVM 的特性和局限性,以及它的工作原理;您还获得了可用于开发的技能。 您了解了 RoboVM 的特性和局限性,以及它的工作原理;您还获得了可用于开发的技能。
然后,您学习了如何安装 iOS 开发所需的软件和工具,以及如何启用 Xcode 和*RoboVM*编译器,在 OS 模拟器上打包和安装基于电话拨号 JavaFX-8 的应用程序 然后,您学习了如何安装 iOS 开发所需的软件和工具,以及如何启用 Xcode 和*RoboVM*编译器,在 OS 模拟器上打包和安装基于电话拨号 JavaFX-8 的应用。
我们已经看到了我们如何重用我们在[第 4 章](4.html#aid-SJGS1 "Chapter 4. Developing a JavaFX Application for Android")*中已经开发的相同应用程序,为 Android*开发 JavaFX 应用程序,证明了 JavaWORA 范例是有效的。 我们已经看到了我们如何重用我们在[第 4 章](4.html#aid-SJGS1 "Chapter 4. Developing a JavaFX Application for Android")*中已经开发的相同应用,为 Android*开发 JavaFX 应用,证明了 JavaWORA 范例是有效的。
最后,我们提供了有关如何在真实设备上运行和部署应用程序的提示。 最后,我们提供了有关如何在真实设备上运行和部署应用的提示。
下一章将开启物联网发展世界的窗口;我们将了解如何购买 RaspberryPi model 2,安装并配置用于开发的*raspbian Wheeezy*操作系统,以及如何为嵌入式设备安装 Java SE。然后,我们将开发一个 JavaFX8 应用程序,该应用程序将在我们的信用卡大小的微型计算机上运行。** 下一章将开启物联网发展世界的窗口;我们将了解如何购买 RaspberryPi model 2,安装并配置用于开发的*raspbian Wheeezy*操作系统,以及如何为嵌入式设备安装 Java SE。然后,我们将开发一个 JavaFX8 应用,该应用将在我们的信用卡大小的微型计算机上运行。**
\ No newline at end of file \ No newline at end of file
# 第 6 章在 Raspberry Pi 上运行 JavaFX 应用程序 # 六、在 Raspberry Pi 上运行 JavaFX 应用
欢迎来到**物联网****物联网**世界。毫无疑问,你经常听到这个词。物联网最近成为一个热门话题,也是有理由的。据估计,目前连接的小型设备数量约为 90 亿台;预计到 2020 年,这一数字将跃升至 240 亿台。虽然预测各不相同,但评估结果却并非如此:就绝对数量而言,物联网将使以往任何计算模型相形见绌。 欢迎来到**物联网****物联网**世界。毫无疑问,你经常听到这个词。物联网最近成为一个热门话题,也是有理由的。据估计,目前连接的小型设备数量约为 90 亿台;预计到 2020 年,这一数字将跃升至 240 亿台。虽然预测各不相同,但评估结果却并非如此:就绝对数量而言,物联网将使以往任何计算模型相形见绌。
...@@ -20,7 +20,7 @@ Java 从发明的第一天起就为物联网而制造。Java 的创建有一个 ...@@ -20,7 +20,7 @@ Java 从发明的第一天起就为物联网而制造。Java 的创建有一个
* 为 JavaFX8 准备树莓 Pi * 为 JavaFX8 准备树莓 Pi
* 远程连接到覆盆子 Pi * 远程连接到覆盆子 Pi
* 在 Raspberry Pi 上安装和配置 JavaSE8 * 在 Raspberry Pi 上安装和配置 JavaSE8
* 在 Raspberry Pi 上开发和运行 JavaFX8 应用程序 * 在 Raspberry Pi 上开发和运行 JavaFX8 应用
* 将 NetBeans 与覆盆子 Pi 结合使用 * 将 NetBeans 与覆盆子 Pi 结合使用
激动的需要有乐趣!好的,让我们直接跳进去玩我们的树莓皮。 激动的需要有乐趣!好的,让我们直接跳进去玩我们的树莓皮。
...@@ -55,7 +55,7 @@ Raspberry Pi 是一款功能强大的设备,允许所有年龄段的人探索 ...@@ -55,7 +55,7 @@ Raspberry Pi 是一款功能强大的设备,允许所有年龄段的人探索
那么是什么使树莓 Pi 如此适合 Java 和 JavaFX 呢?答案可以在以下几点中找到: 那么是什么使树莓 Pi 如此适合 Java 和 JavaFX 呢?答案可以在以下几点中找到:
* 它的速度比规范所显示的要快。如上所述,Pi 的默认时钟速度为 900 MHz。但它的 900 兆赫时钟速度可以安全地超频到 1 千兆赫和 1 GB 内存,这台小型计算机可以运行真正更大和功能强大的应用程序 * 它的速度比规范所显示的要快。如上所述,Pi 的默认时钟速度为 900 MHz。但它的 900 兆赫时钟速度可以安全地超频到 1 千兆赫和 1 GB 内存,这台小型计算机可以运行真正更大和功能强大的应用。
* 非常明智地,基金会选择了带有浮点支持的 CPU,通常称为硬浮点,它提供了比所谓的软浮点仅芯片更大的性能。可用于 Pi 的操作系统利用了额外的功率和速度。 * 非常明智地,基金会选择了带有浮点支持的 CPU,通常称为硬浮点,它提供了比所谓的软浮点仅芯片更大的性能。可用于 Pi 的操作系统利用了额外的功率和速度。
* 最后,Pi 有一个相当坚固的图形处理单元(GPU),具有快速 3D 核心,能够以 40 比特/秒的速度使用 H.264 进行模糊质量的播放([https://www.raspberrypi.org/help/faqs/#generalSoCUsed](https://www.raspberrypi.org/help/faqs/#generalSoCUsed) )。 * 最后,Pi 有一个相当坚固的图形处理单元(GPU),具有快速 3D 核心,能够以 40 比特/秒的速度使用 H.264 进行模糊质量的播放([https://www.raspberrypi.org/help/faqs/#generalSoCUsed](https://www.raspberrypi.org/help/faqs/#generalSoCUsed) )。
...@@ -146,7 +146,7 @@ NOOBS 是一个包含 Raspbian 的简单操作系统安装程序。但是 lite ...@@ -146,7 +146,7 @@ NOOBS 是一个包含 Raspbian 的简单操作系统安装程序。但是 lite
![Using NOOBS](img/image00224.jpeg) ![Using NOOBS](img/image00224.jpeg)
使用 SDFormatter 应用程序格式化 SD 卡 使用 SDFormatter 应用格式化 SD 卡
3. Once the format is completed, close SDFormatter. If you are on Mac or Linux, run the following command line from your terminal to check the disk letter and format type: 3. Once the format is completed, close SDFormatter. If you are on Mac or Linux, run the following command line from your terminal to check the disk letter and format type:
...@@ -435,7 +435,7 @@ $ vncserver ...@@ -435,7 +435,7 @@ $ vncserver
# JavaFX 8 开发先决条件 # JavaFX 8 开发先决条件
现在我们已经为开发设置并配置了 Raspberry Pi,我们需要在开发机器和 Pi 上安装相同的正确匹配 JDK 8 构建版本。这对于在运行 JavaFX8 应用程序时避免库/版本控制问题非常重要,这也是我们下一步要做的。 现在我们已经为开发设置并配置了 Raspberry Pi,我们需要在开发机器和 Pi 上安装相同的正确匹配 JDK 8 构建版本。这对于在运行 JavaFX8 应用时避免库/版本控制问题非常重要,这也是我们下一步要做的。
## 在 Raspberry Pi 上安装 Java SE 8 ## 在 Raspberry Pi 上安装 Java SE 8
...@@ -460,7 +460,7 @@ Raspbian Wheezy Java 版本在 Raspberry Pi 上 ...@@ -460,7 +460,7 @@ Raspbian Wheezy Java 版本在 Raspberry Pi 上
## 添加 JavaFX ## 添加 JavaFX
正如前面提到的一样,Oracle 已经撤销了对 JavaFX Embedded 的支持。如果您已经在 Raspbian Wheezy 上安装了 JDK 8u45 或预捆绑版本,则没有`jfxrt.jar`捆绑版本,因此我们需要提供它以便在我们的 Pi 上运行 JavaFX 应用程序 正如前面提到的一样,Oracle 已经撤销了对 JavaFX Embedded 的支持。如果您已经在 Raspbian Wheezy 上安装了 JDK 8u45 或预捆绑版本,则没有`jfxrt.jar`捆绑版本,因此我们需要提供它以便在我们的 Pi 上运行 JavaFX 应用。
一种方法是按照[中的教程进行操作 https://wiki.openjdk.java.net/display/OpenJFX/Cross+建筑+用于+手臂+硬+浮动](https://wiki.openjdk.java.net/display/OpenJFX/Cross+Building+for+ARM+Hard+Float),交叉建筑 OpenJFX 用于手臂。这是为真正的高级开发人员准备的。 一种方法是按照[中的教程进行操作 https://wiki.openjdk.java.net/display/OpenJFX/Cross+建筑+用于+手臂+硬+浮动](https://wiki.openjdk.java.net/display/OpenJFX/Cross+Building+for+ARM+Hard+Float),交叉建筑 OpenJFX 用于手臂。这是为真正的高级开发人员准备的。
...@@ -477,7 +477,7 @@ Raspbian Wheezy Java 版本在 Raspberry Pi 上 ...@@ -477,7 +477,7 @@ Raspbian Wheezy Java 版本在 Raspberry Pi 上
## 为 Raspberry Pi 配置 NetBeans ## 为 Raspberry Pi 配置 NetBeans
NetBeans 8 增加了指向远程 JDK 并使用它远程调试和执行您在开发机器上本地编写的程序的功能。它甚至可以自动无缝地部署您的应用程序。正如 JoséPereda 在其文章[中所记录的那样 http://netbeans.dzone.com/articles/nb-8-raspberry-pi-end2end](http://netbeans.dzone.com/articles/nb-8-raspberry-pi-end2end) ,您可以通过以下步骤启用此功能: NetBeans 8 增加了指向远程 JDK 并使用它远程调试和执行您在开发机器上本地编写的程序的功能。它甚至可以自动无缝地部署您的应用。正如 JoséPereda 在其文章[中所记录的那样 http://netbeans.dzone.com/articles/nb-8-raspberry-pi-end2end](http://netbeans.dzone.com/articles/nb-8-raspberry-pi-end2end) ,您可以通过以下步骤启用此功能:
1. 在您的计算机上启动 NetBeans。 1. 在您的计算机上启动 NetBeans。
2. 从菜单栏中选择**工具**,然后选择**Java 平台**。点击**添加平台**按钮。 2. 从菜单栏中选择**工具**,然后选择**Java 平台**。点击**添加平台**按钮。
...@@ -501,25 +501,25 @@ NetBeans 8 增加了指向远程 JDK 并使用它远程调试和执行您在开 ...@@ -501,25 +501,25 @@ NetBeans 8 增加了指向远程 JDK 并使用它远程调试和执行您在开
5. 点击**完成**按钮,等待 NetBeans 建立并配置远程 JDK 连接。 5. 点击**完成**按钮,等待 NetBeans 建立并配置远程 JDK 连接。
6. 远程 JDK 就位后,点击**关闭**按钮。 6. 远程 JDK 就位后,点击**关闭**按钮。
现在我们已经完成了设置,您应该拥有一个开发环境,该环境是为 Raspberry Pi 开发 JavaFX8 应用程序的最佳环境之一。让我们开始吧! 现在我们已经完成了设置,您应该拥有一个开发环境,该环境是为 Raspberry Pi 开发 JavaFX8 应用的最佳环境之一。让我们开始吧!
# 交换机应用 # 交换机应用
switch 应用程序本质上非常简单,但其思想主要分为两个要点:如何在 Raspberry Pi 上运行 JavaFX 8 应用程序,以及如何通过 Raspberry Pi**通用输入/输出****GPIO**控制外部世界。为此,我们将使用名为**Pi4j**的项目。 switch 应用本质上非常简单,但其思想主要分为两个要点:如何在 Raspberry Pi 上运行 JavaFX 8 应用,以及如何通过 Raspberry Pi**通用输入/输出****GPIO**控制外部世界。为此,我们将使用名为**Pi4j**的项目。
想法很简单;我们将创建一个 JavaFX 应用程序,该应用程序将作为开关控制器来控制与连接到 Raspberry Pi 的电路相关联的 LED。 想法很简单;我们将创建一个 JavaFX 应用,该应用将作为开关控制器来控制与连接到 Raspberry Pi 的电路相关联的 LED。
以下屏幕截图显示应用程序处于打开和关闭状态: 以下屏幕截图显示应用处于打开和关闭状态:
![The switch application](img/image00235.jpeg) ![The switch application](img/image00235.jpeg)
打开应用程序状态 打开应用状态
. .
![The switch application](img/image00236.jpeg) ![The switch application](img/image00236.jpeg)
关闭应用程序状态 关闭应用状态
## 什么是 Pi4J 库? ## 什么是 Pi4J 库?
...@@ -539,11 +539,11 @@ Pi4j 库([http://pi4j.com](http://pi4j.com) 是项目,旨在在本机库和 ...@@ -539,11 +539,11 @@ Pi4j 库([http://pi4j.com](http://pi4j.com) 是项目,旨在在本机库和
## 申请 ## 申请
正如前面提到的,应用程序界面包含两个按钮。**离开我!**负责关闭 GPIO 控制器并关闭应用程序。第二个按钮是用作开关的切换按钮(**打开**/**关闭**。它有两种状态:选中时,其状态为 true,未选中时变为 false。此外,我们以编程方式更改其标签,以指示当前受控 LED 的状态。 正如前面提到的,应用界面包含两个按钮。**离开我!**负责关闭 GPIO 控制器并关闭应用。第二个按钮是用作开关的切换按钮(**打开**/**关闭**。它有两种状态:选中时,其状态为 true,未选中时变为 false。此外,我们以编程方式更改其标签,以指示当前受控 LED 的状态。
此外,还有一个圆形模拟 LED 的物理状态。因此,当切换按钮打开时,圆圈将填充红色。禁用此选项将使其变为黑色,这是默认状态。 此外,还有一个圆形模拟 LED 的物理状态。因此,当切换按钮打开时,圆圈将填充红色。禁用此选项将使其变为黑色,这是默认状态。
最后,在应用程序场景的底部,我们添加了一个`TitledPane`标记的 Pi 信息,显示一些树莓 Pi 信息。 最后,在应用场景的底部,我们添加了一个`TitledPane`标记的 Pi 信息,显示一些树莓 Pi 信息。
通过查看`SwitchUIController.java`类,您会发现在与`Pi4J`库交互之前,我们有非常重要的字段要声明: 通过查看`SwitchUIController.java`类,您会发现在与`Pi4J`库交互之前,我们有非常重要的字段要声明:
...@@ -571,7 +571,7 @@ pin = gpio.provisionDigitalOutputPin(GPIO_01); ...@@ -571,7 +571,7 @@ pin = gpio.provisionDigitalOutputPin(GPIO_01);
这是如何设置输出引脚#1。您的程序将只能控制设置为输出管脚的管脚的状态。输出引脚用于控制继电器、LED 和晶体管。 这是如何设置输出引脚#1。您的程序将只能控制设置为输出管脚的管脚的状态。输出引脚用于控制继电器、LED 和晶体管。
现在我们要做的就是使用切换按钮控制应用程序中的 LED。这是通过注册用于切换按钮的`doOnOff()`事件函数完成的,如以下代码所示: 现在我们要做的就是使用切换按钮控制应用中的 LED。这是通过注册用于切换按钮的`doOnOff()`事件函数完成的,如以下代码所示:
```java ```java
@FXML @FXML
...@@ -592,7 +592,7 @@ pin = gpio.provisionDigitalOutputPin(GPIO_01); ...@@ -592,7 +592,7 @@ pin = gpio.provisionDigitalOutputPin(GPIO_01);
`P14J`库提供了许多方便的方法来控制或写入 GPIO 引脚的状态。在我们的应用中,我们使用`pin.high()`打开 LED,`pin.low()`关闭 LED。 `P14J`库提供了许多方便的方法来控制或写入 GPIO 引脚的状态。在我们的应用中,我们使用`pin.high()`打开 LED,`pin.low()`关闭 LED。
最后,当应用程序退出时,我们必须关闭 GPIO 控制器。Pi4J 项目提供了一种在应用程序终止时自动将 GPIO 引脚状态设置为非活动的实现。 最后,当应用退出时,我们必须关闭 GPIO 控制器。Pi4J 项目提供了一种在应用终止时自动将 GPIO 引脚状态设置为非活动的实现。
这有助于确保 GPIO 引脚状态未激活,或在程序关闭时保持某些活动处于激活状态。我们只需使用前面创建的 GPIO 实例中的以下代码行即可: 这有助于确保 GPIO 引脚状态未激活,或在程序关闭时保持某些活动处于激活状态。我们只需使用前面创建的 GPIO 实例中的以下代码行即可:
...@@ -610,11 +610,11 @@ gpio.shutdown(); ...@@ -610,11 +610,11 @@ gpio.shutdown();
应用电路 LED 亮起 应用电路 LED 亮起
接下来,让我们将项目配置为直接在 NetBeans 的 Raspberry Pi 上运行 JavaFX switch 应用程序 接下来,让我们将项目配置为直接在 NetBeans 的 Raspberry Pi 上运行 JavaFX switch 应用。
# 将 NetBeans 与 Pi 一起使用 # 将 NetBeans 与 Pi 一起使用
在讨论了我们的应用程序逻辑并了解了它是如何工作的之后,是时候进行最好的部分了:构建应用程序并使用 NetBeans 在 Raspberry Pi 上运行它。步骤如下: 在讨论了我们的应用逻辑并了解了它是如何工作的之后,是时候进行最好的部分了:构建应用并使用 NetBeans 在 Raspberry Pi 上运行它。步骤如下:
1. 右键点击 NetBeans**项目**选项卡中的`Chapter6`项目,选择**属性** 1. 右键点击 NetBeans**项目**选项卡中的`Chapter6`项目,选择**属性**
2. From the **Project Properties** box, select **Run** from the **Categories** menu to the left. You will see a dialog similar to the following screenshot: 2. From the **Project Properties** box, select **Run** from the **Categories** menu to the left. You will see a dialog similar to the following screenshot:
...@@ -635,7 +635,7 @@ gpio.shutdown(); ...@@ -635,7 +635,7 @@ gpio.shutdown();
远程 Pi-JDK 关联 远程 Pi-JDK 关联
5. 最后一步是构建应用程序并将其部署到 Raspberry Pi。要执行此操作,请转到**运行**菜单,选择**运行项目**并查看 NetBeans 输出窗口/选项卡。如果您在运行应用程序时关注 Pi 的屏幕,您将看到以下输出消息: 5. 最后一步是构建应用并将其部署到 Raspberry Pi。要执行此操作,请转到**运行**菜单,选择**运行项目**并查看 NetBeans 输出窗口/选项卡。如果您在运行应用时关注 Pi 的屏幕,您将看到以下输出消息:
```java ```java
jfx-deployment-script: jfx-deployment-script:
...@@ -657,8 +657,8 @@ gpio.shutdown(); ...@@ -657,8 +657,8 @@ gpio.shutdown();
我们还回顾了如何将 JDK 8/JavaFX 8 安装到 Raspberry Pi 和您的开发机器上,并且您学习了如何在您的开发机器上安装和配置 NetBeans,以便它可以使用 Pi 上的 JDK 作为调试和执行的远程平台。 我们还回顾了如何将 JDK 8/JavaFX 8 安装到 Raspberry Pi 和您的开发机器上,并且您学习了如何在您的开发机器上安装和配置 NetBeans,以便它可以使用 Pi 上的 JDK 作为调试和执行的远程平台。
在您的开发机器和 Raspberry Pi 准备就绪的情况下,我们讨论了使用 JavaFX 和一些精选工具/API(包括 Pi4j)来控制 GPIO,从 Raspberry Pi 开发一个简单但伟大的应用程序来控制外部世界所需的原则。 在您的开发机器和 Raspberry Pi 准备就绪的情况下,我们讨论了使用 JavaFX 和一些精选工具/API(包括 Pi4j)来控制 GPIO,从 Raspberry Pi 开发一个简单但伟大的应用来控制外部世界所需的原则。
最后,您了解了如何将应用程序从 NetBeans 远程部署到 Raspberry Pi,只需单击几下即可完成。 最后,您了解了如何将应用从 NetBeans 远程部署到 Raspberry Pi,只需单击几下即可完成。
在下一章中,我们将监控一个温度传感器,测量来自 Arduino 板的血液温度。 在下一章中,我们将监控一个温度传感器,测量来自 Arduino 板的血液温度。
\ No newline at end of file
# 第 7 章:使用 JavaFX 监控 Arduino # 七、使用 JavaFX 监控 Arduino
**Arduino**是一款基于简单可编程微控制器板的开源电子工具,可使用免费开源 IDE 编程。它可以单独或连接到计算机,创建交互式设备,通过从各种开关或传感器获取输入进行感知,并通过控制各种灯光、电机和其他物理设备的输出进行操作。 **Arduino**是一款基于简单可编程微控制器板的开源电子工具,可使用免费开源 IDE 编程。它可以单独或连接到计算机,创建交互式设备,通过从各种开关或传感器获取输入进行感知,并通过控制各种灯光、电机和其他物理设备的输出进行操作。
...@@ -10,14 +10,14 @@ Arduino 可以独立运行,也可以与计算机上运行的软件(Java、Ja ...@@ -10,14 +10,14 @@ Arduino 可以独立运行,也可以与计算机上运行的软件(Java、Ja
一个简单、清晰、易于使用的编程环境;开源和可扩展的软件;开源和可扩展硬件这些特性使 Arduino 支持“自己动手”和“与他人一起动手”的概念,这些概念定义了创客运动。 一个简单、清晰、易于使用的编程环境;开源和可扩展的软件;开源和可扩展硬件这些特性使 Arduino 支持“自己动手”和“与他人一起动手”的概念,这些概念定义了创客运动。
本章将向您展示如何使用 JavaFX 和 Arduino 板开发一个桌面应用程序,以便监控来自真实世界温度传感器的数据并在图表上报告,*您真是热血沸腾!* 本章将向您展示如何使用 JavaFX 和 Arduino 板开发一个桌面应用,以便监控来自真实世界温度传感器的数据并在图表上报告,*您真是热血沸腾!*
在本章中,您将: 在本章中,您将:
* 熟悉 Arduino 板及其组件 * 熟悉 Arduino 板及其组件
* 安装并准备 Arduino 软件和环境、IDE 和驱动程序 * 安装并准备 Arduino 软件和环境、IDE 和驱动程序
* 开发 Arduino 血量计草图,以控制和监控电路 * 开发 Arduino 血量计草图,以控制和监控电路
* 使用串行通信将 Arduino 数据读入 JavaFX 应用程序 * 使用串行通信将 Arduino 数据读入 JavaFX 应用
* 使用 JavaFX 图表 API 显示数据 * 使用 JavaFX 图表 API 显示数据
# 什么是 Arduino 板? # 什么是 Arduino 板?
...@@ -100,7 +100,7 @@ Arduino 软件包括编写代码所需的所有组件、文本编辑器和编译 ...@@ -100,7 +100,7 @@ Arduino 软件包括编写代码所需的所有组件、文本编辑器和编译
从捐赠页面,要么捐赠,要么点击**刚下载**链接开始下载 IDE;就我而言,我选择了`arduino-1.6.4-macosx.zip` 从捐赠页面,要么捐赠,要么点击**刚下载**链接开始下载 IDE;就我而言,我选择了`arduino-1.6.4-macosx.zip`
下载后,解压缩文件并将`Arduino.app`文件复制到 Mac 上的应用程序文件夹中,或将 Arduino 可执行文件链接到易于访问的位置。 下载后,解压缩文件并将`Arduino.app`文件复制到 Mac 上的应用文件夹中,或将 Arduino 可执行文件链接到易于访问的位置。
下载 IDE 后,在开始编程之前,还需要处理一些硬件问题。 下载 IDE 后,在开始编程之前,还需要处理一些硬件问题。
...@@ -139,7 +139,7 @@ Arduino 软件包括编写代码所需的所有组件、文本编辑器和编译 ...@@ -139,7 +139,7 @@ Arduino 软件包括编写代码所需的所有组件、文本编辑器和编译
#### 探索 IDE 和草图 #### 探索 IDE 和草图
假设您的安装成功结束,双击 Arduino 应用程序,您将看到以下屏幕: 假设您的安装成功结束,双击 Arduino 应用,您将看到以下屏幕:
![Exploring the IDE and sketches](img/image00248.jpeg) ![Exploring the IDE and sketches](img/image00248.jpeg)
...@@ -163,7 +163,7 @@ Arduino IDE,首先使用空草图运行 ...@@ -163,7 +163,7 @@ Arduino IDE,首先使用空草图运行
首先,我们将修补我们的电路板,并使用前面在*中描述的组件准备项目。您将需要*部分中描述的其他组件。然后,我们将绘制草图以读取传感器数据,并根据您的皮肤温度数据,打开和关闭 LED。 首先,我们将修补我们的电路板,并使用前面在*中描述的组件准备项目。您将需要*部分中描述的其他组件。然后,我们将绘制草图以读取传感器数据,并根据您的皮肤温度数据,打开和关闭 LED。
最后,我们将为 JavaFX 应用程序提供温度传感器数据,并使用图表 API 显示结果,以指示您的皮肤温度水平。 最后,我们将为 JavaFX 应用提供温度传感器数据,并使用图表 API 显示结果,以指示您的皮肤温度水平。
### 修补电路 ### 修补电路
...@@ -320,7 +320,7 @@ Sensor Value: 158, Volts: 0.77, degrees C: 27.15 ...@@ -320,7 +320,7 @@ Sensor Value: 158, Volts: 0.77, degrees C: 27.15
### 从串口读取数据 ### 从串口读取数据
在 Java 中没有标准的读取串行端口的方法,因为这是一个硬件特定的任务,打破了 Java 多平台的概念。因此,我们需要一个第三方库来完成这项工作,它应该用 Java 编写,以便与我们的应用程序集成。 在 Java 中没有标准的读取串行端口的方法,因为这是一个硬件特定的任务,打破了 Java 多平台的概念。因此,我们需要一个第三方库来完成这项工作,它应该用 Java 编写,以便与我们的应用集成。
Arduino IDE 使用第一个库进行串行通信,称为**RXTX**。最初来自 Trent Jarvi,并在 LGPL v2.1+受控接口链接许可证下发布,它与 Arduino IDE 一起发布,直到 1.5.5 beta 版才与主板通信。但是,它的速度非常慢,现在已被弃用。 Arduino IDE 使用第一个库进行串行通信,称为**RXTX**。最初来自 Trent Jarvi,并在 LGPL v2.1+受控接口链接许可证下发布,它与 Arduino IDE 一起发布,直到 1.5.5 beta 版才与主板通信。但是,它的速度非常慢,现在已被弃用。
...@@ -336,7 +336,7 @@ jSSC 2.8.0 本机库 ...@@ -336,7 +336,7 @@ jSSC 2.8.0 本机库
### JavaFX 血量计监测应用 ### JavaFX 血量计监测应用
我们将设计一个 JavaFX8 应用程序,从温度传感器获取读数,并在折线图中显示数值。我们还将使用一组模拟电路板 LED 的形状来显示电路板上的 LED 发生了什么。为了清楚起见,我们将使用两个类,一个用于串行阅读,另一个用于 JavaFXUI 和主应用程序`BloodMeterFX`文件,包括图表 API。 我们将设计一个 JavaFX8 应用,从温度传感器获取读数,并在折线图中显示数值。我们还将使用一组模拟电路板 LED 的形状来显示电路板上的 LED 发生了什么。为了清楚起见,我们将使用两个类,一个用于串行阅读,另一个用于 JavaFXUI 和主应用`BloodMeterFX`文件,包括图表 API。
我们将使用包含从串行端口读取的最后一行的 StringProperty 绑定这些类(Serial 和 BloodMeterFX)。通过在 JavaFX 线程中监听此属性的更改,我们将知道何时有新的读数添加到图表中。 我们将使用包含从串行端口读取的最后一行的 StringProperty 绑定这些类(Serial 和 BloodMeterFX)。通过在 JavaFX 线程中监听此属性的更改,我们将知道何时有新的读数添加到图表中。
...@@ -346,7 +346,7 @@ jSSC 2.8.0 本机库 ...@@ -346,7 +346,7 @@ jSSC 2.8.0 本机库
让我们先从解释`Serial.java`课程开始。该类代码主要取自*JavaFX 8 简介,示例为 Apress*,核心读取函数有所变化,如下代码片段所示: 让我们先从解释`Serial.java`课程开始。该类代码主要取自*JavaFX 8 简介,示例为 Apress*,核心读取函数有所变化,如下代码片段所示:
如果您打算分发应用程序,您应该将`jSSC.jar`文件添加到 Linux 或 Windows 上的`<JAVA_HOME>/jre/lib/ext`(或 Mac 上的`/Library/Java/Extensions`),或者最好将其添加到您的项目库中,如前一屏幕截图所示。 如果您打算分发应用,您应该将`jSSC.jar`文件添加到 Linux 或 Windows 上的`<JAVA_HOME>/jre/lib/ext`(或 Mac 上的`/Library/Java/Extensions`),或者最好将其添加到您的项目库中,如前一屏幕截图所示。
为了能够读取串口,我们需要以下导入的 jSSC 类: 为了能够读取串口,我们需要以下导入的 jSSC 类:
...@@ -420,7 +420,7 @@ public boolean connect() { ...@@ -420,7 +420,7 @@ public boolean connect() {
} }
``` ```
最后,`disconnect()`方法负责从端口删除侦听器并关闭端口连接以释放应用程序使用的资源。代码如下: 最后,`disconnect()`方法负责从端口删除侦听器并关闭端口连接以释放应用使用的资源。代码如下:
```java ```java
public void disconnect() { public void disconnect() {
...@@ -440,13 +440,13 @@ public void disconnect() { ...@@ -440,13 +440,13 @@ public void disconnect() {
#### 应用逻辑和图表 API #### 应用逻辑和图表 API
我们应用程序的主要组件是`LineChart< Number, Number>`图表类 API,它将用于绘制 Y 轴上的血液温度水平与 X 轴上的时间。 我们应用的主要组件是`LineChart< Number, Number>`图表类 API,它将用于绘制 Y 轴上的血液温度水平与 X 轴上的时间。
自 JavaFX2 以来,已经提供了具有两个轴的图表(如直线图、条形图和面积图),它们属于`Node`类,这使得将它们添加到`Scene`和其他节点一样容易。 自 JavaFX2 以来,已经提供了具有两个轴的图表(如直线图、条形图和面积图),它们属于`Node`类,这使得将它们添加到`Scene`和其他节点一样容易。
在我们的应用程序中,我们将添加以下`createBloodChart()`方法,该方法负责创建和准备图表,并将其返回以添加到主应用程序场景中。 在我们的应用中,我们将添加以下`createBloodChart()`方法,该方法负责创建和准备图表,并将其返回以添加到主应用场景中。
在应用程序开始时,我们有实例变量:一个处理 Arduino 连接和读取的`Serial`对象;`listener``Serial`行对象注册;`BooleanProperty`跟踪连接状态;和三个浮点属性,它们分别跟踪所有传感器数据的实际值、电压转换以及最终转换为温度的电压(以摄氏度为单位)。代码如下: 在应用开始时,我们有实例变量:一个处理 Arduino 连接和读取的`Serial`对象;`listener``Serial`行对象注册;`BooleanProperty`跟踪连接状态;和三个浮点属性,它们分别跟踪所有传感器数据的实际值、电压转换以及最终转换为温度的电压(以摄氏度为单位)。代码如下:
```java ```java
private final Serial serial = new Serial(); private final Serial serial = new Serial();
...@@ -550,7 +550,7 @@ bloodTemp.addListener((ol, ov, nv) -> { ...@@ -550,7 +550,7 @@ bloodTemp.addListener((ol, ov, nv) -> {
最后,通过`loadMainUI()`方法创建主 UI,负责创建整个 UI,并将所有需要的变量绑定到 UI 控件,以便与来自 Arduino 输入的事件进行动态交互。 最后,通过`loadMainUI()`方法创建主 UI,负责创建整个 UI,并将所有需要的变量绑定到 UI 控件,以便与来自 Arduino 输入的事件进行动态交互。
一旦`loadMainUI()`准备并设置了场景根(`BorderPane`对象,我们将创建场景并将其添加到 stage,以便按如下方式运行我们的应用程序 一旦`loadMainUI()`准备并设置了场景根(`BorderPane`对象,我们将创建场景并将其添加到 stage,以便按如下方式运行我们的应用:
```java ```java
Scene scene = new Scene(loadMainUI(), 660, 510); Scene scene = new Scene(loadMainUI(), 660, 510);
...@@ -574,9 +574,9 @@ public void stop() { ...@@ -574,9 +574,9 @@ public void stop() {
}} }}
``` ```
#### 运行应用程序 #### 运行应用
一切就绪-JavaFX 项目以及前面描述的类和添加到其中的`jSSC.jar`库在 Arduino 板连接到笔记本电脑/PC 时编译并运行应用程序。如果一切正常,您将看到以下屏幕截图,显示图表上的温度值和时间值,这取决于你的室温。 一切就绪-JavaFX 项目以及前面描述的类和添加到其中的`jSSC.jar`库在 Arduino 板连接到笔记本电脑/PC 时编译并运行应用。如果一切正常,您将看到以下屏幕截图,显示图表上的温度值和时间值,这取决于你的室温。
祝贺您,您现在正在监视 Arduino 输入,您可以通过`jSSC.jar`库与 Arduino 交互以控制它。 祝贺您,您现在正在监视 Arduino 输入,您可以通过`jSSC.jar`库与 Arduino 交互以控制它。
...@@ -600,4 +600,4 @@ public void stop() { ...@@ -600,4 +600,4 @@ public void stop() {
您学习了如何使用 JavaFX 折线图 API 来监视和显示 Arduino 读数。然后,您看到了一个示例,其中使用来自串行端口的一系列数据绘制 JavaFX 图表,使用 Arduino 板使用温度传感器测量血液温度水平。 您学习了如何使用 JavaFX 折线图 API 来监视和显示 Arduino 读数。然后,您看到了一个示例,其中使用来自串行端口的一系列数据绘制 JavaFX 图表,使用 Arduino 板使用温度传感器测量血液温度水平。
在下一章中,您将了解无需任何输入设备(如键盘、鼠标,甚至只使用手势控制 JavaFX 应用程序的触摸设备)即可与计算机进行非接触式交互。 在下一章中,您将了解无需任何输入设备(如键盘、鼠标,甚至只使用手势控制 JavaFX 应用的触摸设备)即可与计算机进行非接触式交互。
\ No newline at end of file \ No newline at end of file
# 第 8 章:使用 JavaFX 的交互式 Leap Motion 应用程序 # 八、使用 JavaFX 的交互式 Leap Motion 应用
现在,我们来到了本书最激动人心的部分,在这里,我们将通过将肢体语言转换为控制周围物体和计算机的命令,进入新的非接触式人机交互时代。 现在,我们来到了本书最激动人心的部分,在这里,我们将通过将肢体语言转换为控制周围物体和计算机的命令,进入新的非接触式人机交互时代。
...@@ -14,26 +14,26 @@ ...@@ -14,26 +14,26 @@
市场上有几种设备实际上允许我们只使用身体的某些部分与计算机进行交互:许多用于**Xbox**的游戏,微软游戏控制台,使用**Kinect**控制器识别用户的身体动作。肌电臂章可以检测肌肉的运动并将其转换为手势,这样你就可以与电脑互动。Leap Motion controller 可识别用户的手和手指,并将动作和手势转换到计算机。 市场上有几种设备实际上允许我们只使用身体的某些部分与计算机进行交互:许多用于**Xbox**的游戏,微软游戏控制台,使用**Kinect**控制器识别用户的身体动作。肌电臂章可以检测肌肉的运动并将其转换为手势,这样你就可以与电脑互动。Leap Motion controller 可识别用户的手和手指,并将动作和手势转换到计算机。
在本章中,您将学习如何使用**Leap Motion**设备进行手势识别,这是一款非常棒的设备,可以通过非接触方式开发增强的 JavaFX 应用程序 在本章中,您将学习如何使用**Leap Motion**设备进行手势识别,这是一款非常棒的设备,可以通过非接触方式开发增强的 JavaFX 应用。
以下是我们将在本章中讨论的一些主题: 以下是我们将在本章中讨论的一些主题:
* 介绍 Leap 控制器,它是如何工作的,在哪里可以买到它 * 介绍 Leap 控制器,它是如何工作的,在哪里可以买到它
* 获取和安装 SDK,配置其驱动程序,并验证其是否工作 * 获取和安装 SDK,配置其驱动程序,并验证其是否工作
* 基于 Leap 的应用程序构建块的基础知识 * 基于 Leap 的应用构建块的基础知识
* 开发惊人的非接触式 JavaFX 应用程序 * 开发惊人的非接触式 JavaFX 应用
# 跳跃运动控制器 # 跳跃运动控制器
这是一个非常小的设备,高 13 毫米,宽 30 毫米,深 76 毫米,重 45 克(*最终尺寸:0.5 英寸 x1.2 英寸 x3 英寸*),在电脑上运行 Leap Motion 软件后,只需将控制器插入 Mac 或 PC 上的 USB 即可(无需任何外部电源)。 这是一个非常小的设备,高 13 毫米,宽 30 毫米,深 76 毫米,重 45 克(*最终尺寸:0.5 英寸 x1.2 英寸 x3 英寸*),在电脑上运行 Leap Motion 软件后,只需将控制器插入 Mac 或 PC 上的 USB 即可(无需任何外部电源)。
在这里,它与上面的内容一起工作,几乎实时(200-300 fps)捕获你的手和手指的单个动作,并将手势转换为在你的计算机上运行的应用程序上的不同动作。这款售价 79.99 美元的设备于 2013 年推出,名为 Leap Motion controller。 在这里,它与上面的内容一起工作,几乎实时(200-300 fps)捕获你的手和手指的单个动作,并将手势转换为在你的计算机上运行的应用上的不同动作。这款售价 79.99 美元的设备于 2013 年推出,名为 Leap Motion controller。
![The Leap Motion controller](img/image00255.jpeg) ![The Leap Motion controller](img/image00255.jpeg)
与人手相比的跳跃运动大小 与人手相比的跳跃运动大小
从开发人员的角度来看,该设备允许设计应用程序,只需用户的*手**手指*的手势和动作即可控制,就像在*报告中一样!* 从开发人员的角度来看,该设备允许设计应用,只需用户的*手**手指*的手势和动作即可控制,就像在*报告中一样!*
它能感知你如何自然地移动你的手,让你以一种全新的方式使用你的电脑——指向、挥手、伸手、抓取或拿起东西并移动它。你可以做你从未梦想过的事情。 它能感知你如何自然地移动你的手,让你以一种全新的方式使用你的电脑——指向、挥手、伸手、抓取或拿起东西并移动它。你可以做你从未梦想过的事情。
...@@ -55,11 +55,11 @@ Leap Motion 的技术依赖于特殊的接收器硬件和定制软件,可以 ...@@ -55,11 +55,11 @@ Leap Motion 的技术依赖于特殊的接收器硬件和定制软件,可以
Leap 运动控制器硬件层和内部组件 Leap 运动控制器硬件层和内部组件
这是计算机交互的未来——Leap Motion 难以置信的快速和准确的自然用户界面,它以非常精确的方式将所有运动数据发送到计算机。数据将通过 Leap Motion 专有软件检测算法在主机中进行分析,任何启用 Leap 的应用程序都可以直接连接,而无需使用任何其他物理输入设备。 这是计算机交互的未来——Leap Motion 难以置信的快速和准确的自然用户界面,它以非常精确的方式将所有运动数据发送到计算机。数据将通过 Leap Motion 专有软件检测算法在主机中进行分析,任何启用 Leap 的应用都可以直接连接,而无需使用任何其他物理输入设备。
### 坐标系 ### 坐标系
在应用程序中使用 Leap Motion controller 时,将从控制器接收到的坐标值映射到适当的 JavaFX 坐标系是一项基本任务。 在应用中使用 Leap Motion controller 时,将从控制器接收到的坐标值映射到适当的 JavaFX 坐标系是一项基本任务。
从前面的讨论中,您可以看到,该设备可以在超宽的 150 度视野和 z 轴深度范围内检测手、手指和反射工具。这意味着您可以在 3D 中移动手,就像在现实世界中一样。 从前面的讨论中,您可以看到,该设备可以在超宽的 150 度视野和 z 轴深度范围内检测手、手指和反射工具。这意味着您可以在 3D 中移动手,就像在现实世界中一样。
...@@ -123,7 +123,7 @@ Leap Motion 软件包内容 ...@@ -123,7 +123,7 @@ Leap Motion 软件包内容
### 注 ### 注
SDK 还包括许多基于支持的语言的示例,包括`HelloWorld.java`示例,这是了解如何将控制器与 Java 应用程序集成的良好基础。 SDK 还包括许多基于支持的语言的示例,包括`HelloWorld.java`示例,这是了解如何将控制器与 Java 应用集成的良好基础。
#### 验证是否有效 #### 验证是否有效
...@@ -139,15 +139,15 @@ Leap 运动诊断可视化工具应用 ...@@ -139,15 +139,15 @@ Leap 运动诊断可视化工具应用
在深入研究我们的应用之前,我想说的是,ListScundSDK 支持多种语言,包括 java 和其他 java 语言,如 JavaScript 用于 Web、C 语言、C++、Python、Unity、Objto-C 和不真实的游戏引擎。 在深入研究我们的应用之前,我想说的是,ListScundSDK 支持多种语言,包括 java 和其他 java 语言,如 JavaScript 用于 Web、C 语言、C++、Python、Unity、Objto-C 和不真实的游戏引擎。
# Leap JavaFX 应用程序 # Leap JavaFX 应用
和您一样,我迫不及待地开始开发过程,现在您将学习如何与连接到 Leap motion 设备的基于 JavaFX 8 3D 的应用程序进行无接触交互。 和您一样,我迫不及待地开始开发过程,现在您将学习如何与连接到 Leap motion 设备的基于 JavaFX 8 3D 的应用进行无接触交互。
鉴于本书尚未涉及 3D API,这是一个很好的机会来简要介绍 3D API,并将 Leap Motion v2 骨骼建模(hand in 3D)和一些 3D 交互引入到我们的 JavaFX 应用程序中。 鉴于本书尚未涉及 3D API,这是一个很好的机会来简要介绍 3D API,并将 Leap Motion v2 骨骼建模(hand in 3D)和一些 3D 交互引入到我们的 JavaFX 应用中。
Leap Motion API v2.0 引入了一个新的骨骼跟踪模型,该模型提供了有关手和手指的附加信息,预测了看不清的手指和手的位置,并改进了总体跟踪数据。有关 API 的更多信息,请访问[https://developer.leapmotion.com/documentation/java/devguide/Intro_Skeleton_API.html?proglang=java](https://developer.leapmotion.com/documentation/java/devguide/Intro_Skeleton_API.html?proglang=java) Leap Motion API v2.0 引入了一个新的骨骼跟踪模型,该模型提供了有关手和手指的附加信息,预测了看不清的手指和手的位置,并改进了总体跟踪数据。有关 API 的更多信息,请访问[https://developer.leapmotion.com/documentation/java/devguide/Intro_Skeleton_API.html?proglang=java](https://developer.leapmotion.com/documentation/java/devguide/Intro_Skeleton_API.html?proglang=java)
我们将构建并展示如何将 Leap Motion v2 中的新骨骼模型轻松集成到 JavaFX 3D 场景中。我们将使用 JavaFX 提供的预定义 3D 形状 API 快速创建开箱即用的 3D 对象。这些形状包括我们将在应用程序中使用的长方体、圆柱体和球体。 我们将构建并展示如何将 Leap Motion v2 中的新骨骼模型轻松集成到 JavaFX 3D 场景中。我们将使用 JavaFX 提供的预定义 3D 形状 API 快速创建开箱即用的 3D 对象。这些形状包括我们将在应用中使用的长方体、圆柱体和球体。
## JavaFX3D API 一目了然 ## JavaFX3D API 一目了然
...@@ -158,11 +158,11 @@ JavaFX 3D 图形库包含 Shape3D API,JavaFX 中有两种 3D 形状: ...@@ -158,11 +158,11 @@ JavaFX 3D 图形库包含 Shape3D API,JavaFX 中有两种 3D 形状:
* **预定义形状**:提供这些的目的是让您更容易快速创建三维对象。这些形状包括长方体、圆柱体和球体。 * **预定义形状**:提供这些的目的是让您更容易快速创建三维对象。这些形状包括长方体、圆柱体和球体。
* **自定义形状**:JavaFX 网格类层次结构包含`TriangleMesh`子类。三角形网格是 3D 布局中使用的最典型的网格类型。 * **自定义形状**:JavaFX 网格类层次结构包含`TriangleMesh`子类。三角形网格是 3D 布局中使用的最典型的网格类型。
在我们的应用程序中,我们将使用预定义的形状。有关 JavaFX3D API 和示例的更多信息,请访问[http://docs.oracle.com/javase/8/javafx/graphics-tutorial/javafx-3d-graphics.htm](http://docs.oracle.com/javase/8/javafx/graphics-tutorial/javafx-3d-graphics.htm) 在我们的应用中,我们将使用预定义的形状。有关 JavaFX3D API 和示例的更多信息,请访问[http://docs.oracle.com/javase/8/javafx/graphics-tutorial/javafx-3d-graphics.htm](http://docs.oracle.com/javase/8/javafx/graphics-tutorial/javafx-3d-graphics.htm)
## 更多学习资源 ## 更多学习资源
在 Leap Motion controller 和普通 Java 应用程序之间的开发和集成过程中,丰富的资源之一是与 SDK 捆绑的`HelloWorld.java`示例。 在 Leap Motion controller 和普通 Java 应用之间的开发和集成过程中,丰富的资源之一是与 SDK 捆绑的`HelloWorld.java`示例。
另一个讨论与 Java 集成的资源是 Leap motion 文档中的*Java 开发入门*部分,可在[上找到 https://developer.leapmotion.com/documentation/java/devguide/Leap_Guides.html](https://developer.leapmotion.com/documentation/java/devguide/Leap_Guides.html) 另一个讨论与 Java 集成的资源是 Leap motion 文档中的*Java 开发入门*部分,可在[上找到 https://developer.leapmotion.com/documentation/java/devguide/Leap_Guides.html](https://developer.leapmotion.com/documentation/java/devguide/Leap_Guides.html)
...@@ -170,26 +170,26 @@ JavaFX 3D 图形库包含 Shape3D API,JavaFX 中有两种 3D 形状: ...@@ -170,26 +170,26 @@ JavaFX 3D 图形库包含 Shape3D API,JavaFX 中有两种 3D 形状:
在查看`HelloWorld.java`示例和文档示例之后,您将注意到以下几点: 在查看`HelloWorld.java`示例和文档示例之后,您将注意到以下几点:
* 我们需要一个`Controller`对象,允许 Leap 设备和应用程序之间的连接。 * 我们需要一个`Controller`对象,允许 Leap 设备和应用之间的连接。
* 我们需要一个`Listener`子类来处理来自控制器的事件。 * 我们需要一个`Listener`子类来处理来自控制器的事件。
*`onConnect()`方法中启用手势跟踪。 *`onConnect()`方法中启用手势跟踪。
* 该类中的主要方法是`onFrame()`,当具有运动跟踪数据的新`Frame`对象可用时调度的`callback`方法。此对象包含手、手指或工具的列表以及几个向量及其位置、方向和移动速度。 * 该类中的主要方法是`onFrame()`,当具有运动跟踪数据的新`Frame`对象可用时调度的`callback`方法。此对象包含手、手指或工具的列表以及几个向量及其位置、方向和移动速度。
* 如果启用了手势,我们还将根据对最后一帧的分析,获得找到的手势列表。此外,您将知道手势的状态,无论它是刚刚开始、正在进行还是已经结束。 * 如果启用了手势,我们还将根据对最后一帧的分析,获得找到的手势列表。此外,您将知道手势的状态,无论它是刚刚开始、正在进行还是已经结束。
### JavaFX8 3D 应用程序 ### JavaFX8 3D 应用
我们将在这里讨论的应用程序是一个复杂的 JavaFX 8 3D 应用程序,它将帮助您理解基于 Leap 的应用程序开发结构,与设备交互以识别*手的位置*,并与*手势*交互以在 3D 环境中模拟我们的手。 我们将在这里讨论的应用是一个复杂的 JavaFX 8 3D 应用,它将帮助您理解基于 Leap 的应用开发结构,与设备交互以识别*手的位置*,并与*手势*交互以在 3D 环境中模拟我们的手。
在后面的示例部分中,您可以找到更多资源,包括使用 JavaFX 开发基于 Leap 的应用程序的更高级概念。 在后面的示例部分中,您可以找到更多资源,包括使用 JavaFX 开发基于 Leap 的应用的更高级概念。
在这个应用程序中,我们将以圆柱体和球体的形式检测骨骼、手臂和关节(位置和方向),以便在 JavaFX 应用程序`SubScene`中对我们的手进行 3D 建模。然后,我们将检测它们的位置,以模拟跳跃运动装置上方的真实手部运动。 在这个应用中,我们将以圆柱体和球体的形式检测骨骼、手臂和关节(位置和方向),以便在 JavaFX 应用`SubScene`中对我们的手进行 3D 建模。然后,我们将检测它们的位置,以模拟跳跃运动装置上方的真实手部运动。
我们还将添加原始的`image`,以便您可以在应用程序的背景中看到模型和真实的手。 我们还将添加原始的`image`,以便您可以在应用的背景中看到模型和真实的手。
该应用程序由三类组成: 该应用由三类组成:
* `LeapListener.java`:该类是与 Leap Motion controller 线程交互的侦听器,用于将所有分析数据(手臂、骨骼、手指和关节)传输到 JavaFX 应用程序 * `LeapListener.java`:该类是与 Leap Motion controller 线程交互的侦听器,用于将所有分析数据(手臂、骨骼、手指和关节)传输到 JavaFX 应用。
* `LeapJavaFX.java`:这个类是一个 JavaFX 应用程序线程,它将与`LeapListener.java`交互以创建 3D 形状(在每一帧上),而不跟踪以前的形状。由于可观察的 JavaFXbean 属性的强大功能,它允许从 Leap 线程传输的数据被呈现到 JavaFX 线程中。 * `LeapJavaFX.java`:这个类是一个 JavaFX 应用线程,它将与`LeapListener.java`交互以创建 3D 形状(在每一帧上),而不跟踪以前的形状。由于可观察的 JavaFXbean 属性的强大功能,它允许从 Leap 线程传输的数据被呈现到 JavaFX 线程中。
* `Pair.java`:这是一个小对便利类,用于存储每个关节中链接的两块骨骼。 * `Pair.java`:这是一个小对便利类,用于存储每个关节中链接的两块骨骼。
那么,让我们开始看看我们如何做到这一点。 那么,让我们开始看看我们如何做到这一点。
...@@ -200,9 +200,9 @@ JavaFX 3D 图形库包含 Shape3D API,JavaFX 中有两种 3D 形状: ...@@ -200,9 +200,9 @@ JavaFX 3D 图形库包含 Shape3D API,JavaFX 中有两种 3D 形状:
### 它是如何工作的 ### 它是如何工作的
首先,我们将解释应用程序的主桥,即 Leap 事件侦听器`LeapListener.java` 首先,我们将解释应用的主桥,即 Leap 事件侦听器`LeapListener.java`
在开发 JavaFX 应用程序时,主要关注的是如何将 JavaFX 线程与其他非 JavaFX 线程混合,在我们的例子中,是以非常高的速率处理事件的 Leap Motion Event`Listener`子类。 在开发 JavaFX 应用时,主要关注的是如何将 JavaFX 线程与其他非 JavaFX 线程混合,在我们的例子中,是以非常高的速率处理事件的 Leap Motion Event`Listener`子类。
为了将这些事件带到 JavaFX 线程,我们将使用`LeapListener.java`类中的`BooleanProperty`对象。因为我们将只监听`doneList`对象中的更改,所以我们不需要列表也可以观察到,因为它们将触发任何更改的事件(添加一个骨骼)。 为了将这些事件带到 JavaFX 线程,我们将使用`LeapListener.java`类中的`BooleanProperty`对象。因为我们将只监听`doneList`对象中的更改,所以我们不需要列表也可以观察到,因为它们将触发任何更改的事件(添加一个骨骼)。
...@@ -217,7 +217,7 @@ private final List<Pair> joints=new ArrayList<>(); ...@@ -217,7 +217,7 @@ private final List<Pair> joints=new ArrayList<>();
private final List<WritableImage> raw =new ArrayList<>(); private final List<WritableImage> raw =new ArrayList<>();
``` ```
为了获取原始图像,我们必须设置此策略`onInit()`,并且,出于隐私原因,用户还必须为任何应用程序启用 Leap Motion 控制面板中的功能以获取原始相机图像。 为了获取原始图像,我们必须设置此策略`onInit()`,并且,出于隐私原因,用户还必须为任何应用启用 Leap Motion 控制面板中的功能以获取原始相机图像。
```java ```java
@Override @Override
...@@ -242,7 +242,7 @@ public BooleanProperty doneListProperty() { ...@@ -242,7 +242,7 @@ public BooleanProperty doneListProperty() {
} }
``` ```
对于每一个帧,重置`doneList`,处理数据,如果我们有骨骼或手臂,最后将其设置为`true`(如果没有手越过跳跃,帧仍在处理中)。在 JavaFX 应用程序上公开要侦听的属性。 对于每一个帧,重置`doneList`,处理数据,如果我们有骨骼或手臂,最后将其设置为`true`(如果没有手越过跳跃,帧仍在处理中)。在 JavaFX 应用上公开要侦听的属性。
现在处理帧对象数据。首先是图像(这可以在最后完成)。清除每帧上的列表,然后检索图像(从左侧和右侧摄影机)。如果您想了解这是如何工作的,Leap 文档非常有用。访问[https://developer.leapmotion.com/documentation/java/devguide/Leap_Images.html](https://developer.leapmotion.com/documentation/java/devguide/Leap_Images.html) 现在处理帧对象数据。首先是图像(这可以在最后完成)。清除每帧上的列表,然后检索图像(从左侧和右侧摄影机)。如果您想了解这是如何工作的,Leap 文档非常有用。访问[https://developer.leapmotion.com/documentation/java/devguide/Leap_Images.html](https://developer.leapmotion.com/documentation/java/devguide/Leap_Images.html)
...@@ -362,7 +362,7 @@ public List<Bone> getBones(){ ...@@ -362,7 +362,7 @@ public List<Bone> getBones(){
这比 JavaFX 脉冲(60 fps 或大约 16 ms)快,因此可以在渲染骨骼时更改列表。通过这种*克隆*方法,我们避免了任何并发问题。 这比 JavaFX 脉冲(60 fps 或大约 16 ms)快,因此可以在渲染骨骼时更改列表。通过这种*克隆*方法,我们避免了任何并发问题。
LeapJavaFX 应用程序的侦听器方法如下: LeapJavaFX 应用的侦听器方法如下:
```java ```java
Override Override
...@@ -528,25 +528,25 @@ forEach(arm->{ ...@@ -528,25 +528,25 @@ forEach(arm->{
}); });
``` ```
### 运行应用程序 ### 运行应用
祝贺现在连接您的 Leap 控制器(Leap 图标应为绿色)并运行您的应用程序。如果一切正常,您应该首先看到一个空的应用程序场景,如以下屏幕截图所示: 祝贺现在连接您的 Leap 控制器(Leap 图标应为绿色)并运行您的应用。如果一切正常,您应该首先看到一个空的应用场景,如以下屏幕截图所示:
![Running the application](img/image00262.jpeg) ![Running the application](img/image00262.jpeg)
Leap JavaFX 应用程序的初始运行 Leap JavaFX 应用的初始运行
移动并挥动你的手,你的手的骨骼模型应该以真实的手出现在背景中,响应你的真实运动,如图所示: 移动并挥动你的手,你的手的骨骼模型应该以真实的手出现在背景中,响应你的真实运动,如图所示:
![Running the application](img/image00263.jpeg) ![Running the application](img/image00263.jpeg)
Leap JavaFX 应用程序与 Leap 控制器的交互 Leap JavaFX 应用与 Leap 控制器的交互
尝试不同的手臂或手的模式和位置;您应该在 JavaFX 应用程序场景中复制此内容,如以下屏幕截图所示: 尝试不同的手臂或手的模式和位置;您应该在 JavaFX 应用场景中复制此内容,如以下屏幕截图所示:
![Running the application](img/image00264.jpeg) ![Running the application](img/image00264.jpeg)
Leap JavaFX 应用程序和 Leap 控制器的交互,具有不同的手模式 Leap JavaFX 应用和 Leap 控制器的交互,具有不同的手模式
# 更多例子 # 更多例子
...@@ -554,8 +554,8 @@ Leap JavaFX 应用程序和 Leap 控制器的交互,具有不同的手模式 ...@@ -554,8 +554,8 @@ Leap JavaFX 应用程序和 Leap 控制器的交互,具有不同的手模式
# 总结 # 总结
在本章中,您了解了令人印象深刻的 Leap Motion 设备,以及使用它增强 JavaFX 应用程序所产生的非常好的组合效果。 在本章中,您了解了令人印象深刻的 Leap Motion 设备,以及使用它增强 JavaFX 应用所产生的非常好的组合效果。
您从了解设备及其工作原理开始。接下来,我们讨论了它的 SDK for Java,并探索了一个简单的应用程序,在该应用程序中,您了解了如何在一个线程中侦听和处理来自 Leap 设备的数据,同时触发 JavaFX 线程中的事件以在场景图中处理这些事件。 您从了解设备及其工作原理开始。接下来,我们讨论了它的 SDK for Java,并探索了一个简单的应用,在该应用中,您了解了如何在一个线程中侦听和处理来自 Leap 设备的数据,同时触发 JavaFX 线程中的事件以在场景图中处理这些事件。
在下一章中,我将为真正的 JavaFX 大师提供高级工具和资源。 在下一章中,我将为真正的 JavaFX 大师提供高级工具和资源。
\ No newline at end of file
# 附录 A.成为 JavaFX 大师 # 九、成为 JavaFX 大师
您的 JavaFX8 之旅会在这里结束吗?绝对不是!JavaFX 是一个非常大的话题,它的发展日新月异,从 Oracle 发布的具有新特性、功能和稳定性的核心版本,到许多创建第三方库的社区个人和公司,以填补您可能遇到的任何缺失,或围绕它发明核心中不存在的新库。 您的 JavaFX8 之旅会在这里结束吗?绝对不是!JavaFX 是一个非常大的话题,它的发展日新月异,从 Oracle 发布的具有新特性、功能和稳定性的核心版本,到许多创建第三方库的社区个人和公司,以填补您可能遇到的任何缺失,或围绕它发明核心中不存在的新库。
当然,在这本书中,我无法涵盖所有 JavaFX8 主题。取而代之的是,我试图通过找到自己的方式并了解如何自己去做,来触及许多 JavaFX 领域的表面,并打开主题键,以使您的冒险更容易。 当然,在这本书中,我无法涵盖所有 JavaFX8 主题。取而代之的是,我试图通过找到自己的方式并了解如何自己去做,来触及许多 JavaFX 领域的表面,并打开主题键,以使您的冒险更容易。
然而,我们还讨论了许多其他工具和技术,通过开发传统的 web 和桌面应用程序,然后转移到一个更先进和市场要求更高的领域,即移动开发。 然而,我们还讨论了许多其他工具和技术,通过开发传统的 web 和桌面应用,然后转移到一个更先进和市场要求更高的领域,即移动开发。
我们通过学习**物联网**(下一个信息技术时代)来探索未来的越多,我们涉及的有趣话题就越多。我们在电影中见过很多次运动,也想象过它,我们通过开发一款增强的基于无触摸的 JavaFX8 和一款令人惊叹的 Leap motion v2 小工具,实现了我们的梦想。 我们通过学习**物联网**(下一个信息技术时代)来探索未来的越多,我们涉及的有趣话题就越多。我们在电影中见过很多次运动,也想象过它,我们通过开发一款增强的基于无触摸的 JavaFX8 和一款令人惊叹的 Leap motion v2 小工具,实现了我们的梦想。
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
*那么,我们从这里走到哪里?* *那么,我们从这里走到哪里?*
现在,由于您有许多已启动并正在运行的 JavaFX8 应用程序,并且了解它在许多平台和硬件上的工作方式,剩下的取决于您和您的创造力。 现在,由于您有许多已启动并正在运行的 JavaFX8 应用,并且了解它在许多平台和硬件上的工作方式,剩下的取决于您和您的创造力。
加入 Facebook、Twitter 上的社区,关注技术专家的博客 JavaFX 博客[http://blogs.oracle.com/javafx/](http://blogs.oracle.com/javafx/) ,并在[上查找新闻、演示和见解 http://fxexperience.com/](http://fxexperience.com/) 。首先是实验。 加入 Facebook、Twitter 上的社区,关注技术专家的博客 JavaFX 博客[http://blogs.oracle.com/javafx/](http://blogs.oracle.com/javafx/) ,并在[上查找新闻、演示和见解 http://fxexperience.com/](http://fxexperience.com/) 。首先是实验。
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
## JavaFX 样本 ## JavaFX 样本
开始学习 JavaFX8 的最佳资源之一是 JavaDevelopmentKit8 示例和演示,其中包括一个 JavaFXDemo 文件夹,其中包含许多精彩的高级应用程序,这些应用程序包含所有 JavaFX 主题,源代码可供您自己试验。 开始学习 JavaFX8 的最佳资源之一是 JavaDevelopmentKit8 示例和演示,其中包括一个 JavaFXDemo 文件夹,其中包含许多精彩的高级应用,这些应用包含所有 JavaFX 主题,源代码可供您自己试验。
您只需访问以下链接[即可下载样本 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) ,然后进入**Java SE 开发工具包 8u45 演示和示例下载**表,选中**接受许可协议**单选按钮,然后单击与您的操作系统相关的 zip 文件链接,如下图所示: 您只需访问以下链接[即可下载样本 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) ,然后进入**Java SE 开发工具包 8u45 演示和示例下载**表,选中**接受许可协议**单选按钮,然后单击与您的操作系统相关的 zip 文件链接,如下图所示:
...@@ -61,7 +61,7 @@ ...@@ -61,7 +61,7 @@
JavaFX 示例文件夹内容 JavaFX 示例文件夹内容
任何`sample.jar`都可以作为独立应用程序运行;双击 JAR 文件,我们有四个应用程序 任何`sample.jar`都可以作为独立应用运行;双击 JAR 文件,我们有四个应用
1. `Ensemble8.jar`: A gallery of sample applications that demonstrate a large variety of JavaFX features, including animation, charts, and controls. For each sample, you can do the following on all platforms: 1. `Ensemble8.jar`: A gallery of sample applications that demonstrate a large variety of JavaFX features, including animation, charts, and controls. For each sample, you can do the following on all platforms:
* 查看正在运行的示例并与之交互 * 查看正在运行的示例并与之交互
...@@ -75,23 +75,23 @@ JavaFX 示例文件夹内容 ...@@ -75,23 +75,23 @@ JavaFX 示例文件夹内容
![JavaFX samples](img/image00267.jpeg) ![JavaFX samples](img/image00267.jpeg)
Ensemble8 应用程序正在运行 Ensemble8 应用正在运行
2. `MandelbrotSet.jar`: A sample application that demonstrates the advantages of parallel execution done using the Java Parallel API. 2. `MandelbrotSet.jar`: A sample application that demonstrates the advantages of parallel execution done using the Java Parallel API.
应用程序使用 Mandelbrot 集算法渲染图像,并在输入参数范围内提供直观导航。 应用使用 Mandelbrot 集算法渲染图像,并在输入参数范围内提供直观导航。
更多信息可在`MandelbrotSet`文件夹内的`index.html`文件中找到。 更多信息可在`MandelbrotSet`文件夹内的`index.html`文件中找到。
![JavaFX samples](img/image00268.jpeg) ![JavaFX samples](img/image00268.jpeg)
MandelbrotSet 应用程序正在运行 MandelbrotSet 应用正在运行
3. `Modena.jar`: A sample application that demonstrates the look and feel of UI components using the `Modena` theme. It gives you the option to contrast the `Modena` and `Caspian` themes and explore various aspects of these themes. 3. `Modena.jar`: A sample application that demonstrates the look and feel of UI components using the `Modena` theme. It gives you the option to contrast the `Modena` and `Caspian` themes and explore various aspects of these themes.
![JavaFX samples](img/image00269.jpeg) ![JavaFX samples](img/image00269.jpeg)
Modena 应用程序正在运行 Modena 应用正在运行
4. `3DViewer.jar`: 3DViewer is a sample application that allows the user to navigate and examine a 3D scene with a mouse or a track pad. 3DViewer has importers for a subset of the features in **OBJ** and Maya files. 4. `3DViewer.jar`: 3DViewer is a sample application that allows the user to navigate and examine a 3D scene with a mouse or a track pad. 3DViewer has importers for a subset of the features in **OBJ** and Maya files.
...@@ -99,13 +99,13 @@ JavaFX 示例文件夹内容 ...@@ -99,13 +99,13 @@ JavaFX 示例文件夹内容
![JavaFX samples](img/image00270.jpeg) ![JavaFX samples](img/image00270.jpeg)
正在运行的 3DViewer 应用程序 正在运行的 3DViewer 应用
为了让自己玩代码,并尝试您可能做的任何更改,祝贺您,您有机会从**NetBeans**运行前面提到的所有应用程序,如下所示: 为了让自己玩代码,并尝试您可能做的任何更改,祝贺您,您有机会从**NetBeans**运行前面提到的所有应用,如下所示:
5. 在 NetBeans IDE 中,点击工具栏中的**打开项目**,或者在**文件**菜单上选择**打开项目** 5. 在 NetBeans IDE 中,点击工具栏中的**打开项目**,或者在**文件**菜单上选择**打开项目**
6. 导航到解压缩样本的位置,在`src`目录中选择一个项目,然后点击**打开** 6. 导航到解压缩样本的位置,在`src`目录中选择一个项目,然后点击**打开**
7. 要在 NetBeans IDE 中运行应用程序,请在**项目**窗格中,右键单击该项目并选择**运行** 7. 要在 NetBeans IDE 中运行应用,请在**项目**窗格中,右键单击该项目并选择**运行**
## 爪哇 SE8 ## 爪哇 SE8
...@@ -173,7 +173,7 @@ Java 8 文档和指南位于以下链接: ...@@ -173,7 +173,7 @@ Java 8 文档和指南位于以下链接:
### 纳肖恩 ### 纳肖恩
Java SE 8 包含一个名为**Nashorn**的新脚本引擎,这是一个新的、经过改进的 Java 运行时 JavaScript 引擎。该引擎使开发人员能够使用 JavaScript 语言编写应用程序 Java SE 8 包含一个名为**Nashorn**的新脚本引擎,这是一个新的、经过改进的 Java 运行时 JavaScript 引擎。该引擎使开发人员能够使用 JavaScript 语言编写应用。
以下链接和参考文献是描述纳肖恩的文章和博客: 以下链接和参考文献是描述纳肖恩的文章和博客:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册