Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 20 additions & 36 deletions docs/learn-javafx17/01.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,41 +67,25 @@ JavaFX 最初是由 Chris Oliver 在 SeeBeyond 开发的,它被称为 F3 (Form
JavaFX 的第一个版本发布于 2008 年第四季度。版本号从 2.2 跃升到 8.0。从 Java 8 开始,Java SE 和 JavaFX 的版本号将是相同的。Java SE 和 JavaFX 的主要版本也将同时发布。JavaFX 的当前版本是 17.0 版。从 Java SE 11 开始,JavaFX 不再是 Java SE 运行时库的一部分。在 Java 11 中,您需要下载并包含 JavaFX 库来编译和运行您的 JavaFX 程序。表 1-1 包含 JavaFX 的发布列表。

表 1-1

JavaFX 版本

<colgroup><col class="tcol1 align-left"> <col class="tcol2 align-left"> <col class="tcol3 align-left"></colgroup>
|

出厂日期

|

版本

|

评论

|
| --- | --- | --- |
| 2008 年第四季度 | JavaFX 1.0 | 这是 JavaFX 的最初版本。它使用一种称为 JavaFX Script 的声明语言来编写 JavaFX 代码。 |
| Q1,2009 年 | JavaFX 1.1 | 引入了对 JavaFX Mobile 的支持。 |
| Q2,2009 年 | JavaFX 1.2 | – |
| Q2,2010 年 | JavaFX 1.3 | – |
| 2010 年第三季度 | JavaFX 1.3.1 | – |
| 2011 年第四季度 | java fx 2.0 | 不再支持 JavaFX 脚本。它使用 Java 语言编写 JavaFX 代码。对 JavaFX Mobile 的支持已取消。 |
| 2012 年,Q2 | JavaFX 2.1 | 引入了对 Mac OS 桌面版的支持。 |
| 2012 年第三季度 | JavaFX 2.2 | – |
| 2014 年,Q1 | JavaFX 8.0 | JavaFX 版本从 2.2 跳到了 8.0。JavaFX 和 Java SE 版本将从 Java 8 开始匹配。 |
| 2015 年,Q2 | JavaFX 9.0 | 公开的一些内部 API,JEP253。 |
| 2018 年第三季度 | JavaFX 11.0.3 | JavaFX 不再是 Oracle Java JDK 的一部分。JavaFX 现在是一个可下载的开源模块,由 Gluon 公司提供。作为*端口*增加了对手持设备和其他嵌入式设备的支持。 |
| 2019 年,Q1 | JavaFX 12.0.1 | 错误修复和一些增强。 |
| 2019 年第三季度 | JavaFX 13.0 | 错误修复和一些增强。 |
| Q1,2020 年 | JavaFX 14.0 | 在 WebView 中支持 HTTP/2。更多的错误修复和一些增强。 |
| 2020 年第三季度 | JavaFX 15.0 | 提高稳定性(内存管理)。更多的错误修复和一些增强。 |
| Q1,2021 年 | JavaFX 16.0 | JavaFX 模块必须从模块路径加载,而不是从类路径加载(编译器警告)。更多的错误修复和一些增强。 |
| 2021 年第四季度 | JavaFX 17.0.1 | 小的改进和错误修复。 |
| 出厂日期 | 版本 | 说明 |
|----------------|--------------|----------------------------------------------------------------------|
| 2008 年第四季度 | JavaFX 1.0 | 这是 JavaFX 的最初版本。它使用一种称为 JavaFX Script 的声明语言来编写 JavaFX 代码。 |
| 2009 年 Q1 | JavaFX 1.1 | 引入了对 JavaFX Mobile 的支持。|
| 2009 年 Q2 | JavaFX 1.2 | – |
| 2010 年 Q2 | JavaFX 1.3 | – |
| 2010 年第三季度 | JavaFX 1.3.1 | – |
| 2011 年第四季度 | JavaFX 2.0 | 不再支持 JavaFX 脚本。它使用 Java 语言编写 JavaFX 代码。对 JavaFX Mobile 的支持已取消。 |
| 2012 年 Q2 | JavaFX 2.1 | 引入了对 Mac OS 桌面版的支持。|
| 2012 年第三季度 | JavaFX 2.2 | – |
| 2014 年 Q1 | JavaFX 8.0 | JavaFX 版本从 2.2 跳到了 8.0。JavaFX 和 Java SE 版本将从 Java 8 开始匹配。 |
| 2015 年 Q2 | JavaFX 9.0 | 公开的一些内部 API,JEP253。|
| 2018 年第三季度 | JavaFX 11.0.3| JavaFX 不再是 Oracle Java JDK 的一部分。JavaFX 现在是一个可下载的开源模块,由 Gluon 公司提供。作为端口增加了对手持设备和其他嵌入式设备的支持。 |
| 2019 年 Q1 | JavaFX 12.0.1| 错误修复和一些增强。|
| 2019 年第三季度 | JavaFX 13.0 | 错误修复和一些增强。|
| 2020 年 Q1 | JavaFX 14.0 | 在 WebView 中支持 HTTP/2。更多的错误修复和一些增强。|
| 2020 年第三季度 | JavaFX 15.0 | 提高稳定性(内存管理)。更多的错误修复和一些增强。|
| 2021 年 Q1 | JavaFX 16.0 | JavaFX 模块必须从模块路径加载,而不是从类路径加载(编译器警告)。更多的错误修复和一些增强。 |
| 2021 年第四季度 | JavaFX 17.0.1| 小的改进和错误修复。|

发行说明显示了更多详细信息。你可以在 [`https://github.com/openjdk/jfx/tree/master/doc-files`](https://github.com/openjdk/jfx/tree/master/doc-files) 看到它们。

Expand Down Expand Up @@ -834,4 +818,4 @@ JavaFX 应用程序继承自`Application`类。JavaFX 运行时创建称为初

在 JavaFX 应用程序的生命周期中,JavaFX 运行时以特定的顺序调用 JavaFX `Application`类的预定义方法。首先,调用该类的`no-args`构造器,然后调用`init()`和`start()`方法。当应用程序终止时,会调用 stop()方法。您可以通过调用`Platform.exit()`方法来终止 JavaFX 应用程序。

下一章将向您介绍 JavaFX 中的属性和绑定。
下一章将向您介绍 JavaFX 中的属性和绑定。
67 changes: 21 additions & 46 deletions docs/learn-javafx17/02.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ opens com.jdojo.binding to javafx.graphics, javafx.base;

```

## 什么是财产
## 什么是属性

一个 Java 类可以包含两类成员:*字段*和*方法*。字段代表对象的状态,它们被声明为私有的。公共方法被称为*访问器*或*获取器*和*设置器*,用于读取和修改私有字段。简单地说,对于所有或部分私有字段,具有公共访问器的 Java 类被称为 Java *bean* ,访问器定义了 bean 的属性。Java bean 的属性允许用户定制其状态、行为或两者。
一个 Java 类可以包含两类成员:**字段**和**方法**。字段代表对象的状态,它们被声明为私有的。公共方法被称为*访问器*或*获取器*和*设置器*,用于读取和修改私有字段。简单地说,对于所有或部分私有字段,具有公共访问器的 Java 类被称为 Java *bean* ,访问器定义了 bean 的属性。Java bean 的属性允许用户定制其状态、行为或两者。

Java beans 是可观察的。它们支持属性更改通知。当 Java bean 的公共属性发生变化时,会向所有感兴趣的侦听器发送通知。

Expand Down Expand Up @@ -102,11 +102,11 @@ public class Person {

```

那么,什么是财产呢?一个*属性*是一个类的公共可访问属性,影响它的状态、行为或两者。即使属性是可公开访问的,它的使用(读/写)也会调用隐藏实际实现的方法来访问数据。属性是可观察的,所以当它的值改变时,感兴趣的人会得到通知。
那么,什么是属性呢?一个*属性*是一个类的公共可访问属性,影响它的状态、行为或两者。即使属性是可公开访问的,它的使用(读/写)也会调用隐藏实际实现的方法来访问数据。属性是可观察的,所以当它的值改变时,感兴趣的人会得到通知。

Tip

本质上,属性定义了对象的公共状态,可以读取、写入和观察对象的变化。与其他编程语言(如 C#)不同,Java 中的属性在语言级别不受支持。Java 对属性的支持来自 JavaBeans API 和设计模式。关于 Java 中属性的更多细节,请参考 JavaBeans 规范,可以从 [`www.oracle.com/java/technologies/javase/javabeans-spec.html`](http://www.oracle.com/java/technologies/javase/javabeans-spec.html) 下载。
>本质上,属性定义了对象的公共状态,可以读取、写入和观察对象的变化。与其他编程语言(如 C#)不同,Java 中的属性在语言级别不受支持。Java 对属性的支持来自 JavaBeans API 和设计模式。关于 Java 中属性的更多细节,请参考 JavaBeans 规范,可以从 [`www.oracle.com/java/technologies/javase/javabeans-spec.html`](http://www.oracle.com/java/technologies/javase/javabeans-spec.html) 下载。

除了简单的属性,比如`Person` bean 的`name`属性,Java 还支持*索引*、*绑定*和*约束*属性。索引属性是使用索引访问的值的数组。索引属性是使用数组数据类型实现的。当绑定属性发生更改时,它会向所有侦听器发送通知。受约束的属性是侦听器可以否决更改的绑定属性。

Expand Down Expand Up @@ -343,15 +343,8 @@ Tip
包装单个值的属性类列表

<colgroup><col class="tcol1 align-left"> <col class="tcol2 align-left"></colgroup>
|

类型

|

XXX 值

|
| 类型 | XXX 值|
| --- | --- |
| `int` | `Integer` |
| `long` | `Long` |
Expand Down Expand Up @@ -461,7 +454,7 @@ public class Book {

Tip

按照惯例,类的属性的 getters 和 setters 被声明为`final`。添加了使用 JavaBeans 命名约定的额外的 getters 和 setters,以使该类能够与使用旧 JavaBeans 命名约定来标识类属性的旧工具和框架进行互操作。
> 按照惯例,类的属性的 getters 和 setters 被声明为`final`。添加了使用 JavaBeans 命名约定的额外的 getters 和 setters,以使该类能够与使用旧 JavaBeans 命名约定来标识类属性的旧工具和框架进行互操作。

以下代码片段显示了对`Book`类的只读`ISBN`属性的声明:

Expand Down Expand Up @@ -641,13 +634,13 @@ JavaFX 属性 API 中的类和接口分布在不同的包中。那些包是`java

Tip

所有 JavaFX 属性都是可观察的。

只有当其内容的状态从有效变为无效时,`Observable`才会生成无效事件。也就是说,一行中的多个失效应该只生成一个失效事件。JavaFX 中的属性类遵循这个原则。
>所有 JavaFX 属性都是可观察的。
>
>只有当其内容的状态从有效变为无效时,`Observable`才会生成无效事件。也就是说,一行中的多个失效应该只生成一个失效事件。JavaFX 中的属性类遵循这个原则。

Tip

一个`Observable`产生一个失效事件并不一定意味着它的内容发生了变化。意思就是它的内容因为某种原因是无效的。例如,对一个`ObservableList`进行排序可能会生成一个无效事件。排序不会改变列表的内容;它只是对内容进行了重新排序。
>一个`Observable`产生一个失效事件并不一定意味着它的内容发生了变化。意思就是它的内容因为某种原因是无效的。例如,对一个`ObservableList`进行排序可能会生成一个无效事件。排序不会改变列表的内容;它只是对内容进行了重新排序。

`ObservableValue`接口继承自`Observable`接口。一个`ObservableValue`包装了一个值,可以观察到它的变化。它有一个`getValue()`方法,返回它包装的值。它生成失效事件和变更事件。当`ObservableValue`中的值不再有效时,生成失效事件。值更改时会生成更改事件。您可以将一个`ChangeListener`注册到一个`ObservableValue`。每当`ChangeListener`的值发生变化时,就会调用`changed()`方法。`changed()`方法接收三个参数:对`ObservableValue`的引用、旧值和新值。

Expand Down Expand Up @@ -681,7 +674,7 @@ Tip

Tip

所有读/写 JavaFX 属性都支持绑定。
>所有读/写 JavaFX 属性都支持绑定。

图 2-2 显示了 JavaFX 中 integer 属性的部分类图。该图让您了解 JavaFX 属性 API 的复杂性。您不需要学习属性 API 中的所有类。在您的应用程序中,您将只使用其中的几个。

Expand Down Expand Up @@ -1346,22 +1339,11 @@ int value = sum.intValue(); // Get the int value
`NumberExpression`界面中方法的总结

<colgroup><col class="tcol1 align-left"> <col class="tcol2 align-left"> <col class="tcol3 align-left"></colgroup>
|

方法名称

|

返回类型

|

描述

|
| 方法名称| 返回类型| 描述|
| --- | --- | --- |
| `add()``subtract()``multiply()``divide()` | `NumberBinding` | 这些方法创建一个新的`NumberBinding`,它是`NumberExpression`的和、差、积和除,以及一个数值或一个`ObservableNumberValue`。 |
| `greaterThan()``greaterThanOrEqualTo()``isEqualTo()``isNotEqualTo()``lessThan()``lessThanOrEqualTo()` | `BooleanBinding` | 这些方法创建一个新的`BooleanBinding`,存储`NumberExpression`和一个数值或`ObservableNumberValue`的比较结果。方法名足够清楚,可以告诉我们它们执行哪种比较。 |
| `add()` `subtract()` `multiply()` `divide()` | `NumberBinding` | 这些方法创建一个新的`NumberBinding`,它是`NumberExpression`的和、差、积和除,以及一个数值或一个`ObservableNumberValue`。 |
| `greaterThan()` `greaterThanOrEqualTo()` `isEqualTo()` `isNotEqualTo()` `lessThan()` `lessThanOrEqualTo()` | `BooleanBinding` | 这些方法创建一个新的`BooleanBinding`,存储`NumberExpression`和一个数值或`ObservableNumberValue`的比较结果。方法名足够清楚,可以告诉我们它们执行哪种比较。 |
| `negate()` | `NumberBinding` | 它创建了一个新的`NumberBinding`,它是对`NumberExpression`的否定。 |
| `asString()` | `StringBinding` | 它创建了一个`StringBinding`,将`NumberExpression`的值保存为一个`String`对象。此方法还支持基于区域设置的字符串格式。 |

Expand Down Expand Up @@ -1620,27 +1602,20 @@ Listing 2-15Using the When Class to Perform a Ternary Operation
`Bindings`类中方法的总结

<colgroup><col class="tcol1 align-left"> <col class="tcol2 align-left"></colgroup>
|

方法名称

|

描述

|
| 方法名称| 描述|
| --- | --- |
| `add()``subtract()``multiply()``divide()` | 它们通过对它的两个参数应用算术运算来创建一个绑定。至少有一个参数必须是`ObservableNumberValue`。如果参数之一是一个`double`,它的返回类型是`DoubleBinding`;否则,其返回类型为`NumberBinding`。 |
| `add()` `subtract()` `multiply()` `divide()` | 它们通过对它的两个参数应用算术运算来创建一个绑定。至少有一个参数必须是`ObservableNumberValue`。如果参数之一是一个`double`,它的返回类型是`DoubleBinding`;否则,其返回类型为`NumberBinding`。 |
| `and()` | 它通过对它的两个参数应用布尔运算`and`来创建一个`BooleanBinding`。 |
| `bindBidirectional()``unbindBidirectional()` | 它们创建和删除两个属性之间的双向绑定。 |
| `bindBidirectional()` `unbindBidirectional()` | 它们创建和删除两个属性之间的双向绑定。 |
| `concat()` | 它返回一个保存其参数串联值的`StringExpression`。它需要一个`varargs`参数。 |
| `convert()` | 它返回一个包装其参数的`StringExpression`。 |
| `createXXXBinding()` | 它允许您创建一个`XXX`类型的定制绑定,其中`XXX`可以是`Boolean`、`Double`、`Float`、`Integer`、`String`和`Object`。 |
| `equal()``notEqual()``equalIgnoreCase()``notEqualIgnoreCase()` | 他们创建了一个`BooleanBinding`,包装了两个参数相等或不相等的比较结果。这些方法的一些变体允许传递公差值。如果两个参数在公差范围内,则认为它们相等。通常,容差值用于比较浮点数。这些方法的忽略大小写变量只对`String`类型有效。 |
| `equal()` `notEqual()` `equalIgnoreCase()` `notEqualIgnoreCase()` | 他们创建了一个`BooleanBinding`,包装了两个参数相等或不相等的比较结果。这些方法的一些变体允许传递公差值。如果两个参数在公差范围内,则认为它们相等。通常,容差值用于比较浮点数。这些方法的忽略大小写变量只对`String`类型有效。 |
| `format()` | 它创建一个`StringExpression`,保存根据指定格式`String`格式化的多个对象的值。 |
| `greaterThan()``greaterThanOrEqual()``lessThan()``lessThanOrEqual()` | 他们创建一个`BooleanBinding`来包装比较参数的结果。 |
| `isNotNull``isNull` | 他们创建一个`BooleanBinding`来包装与`null`进行比较的结果。 |
| `max()``min()` | 它们创建一个绑定,保存该方法的两个参数的最大值和最小值。其中一个参数必须是`ObservableNumberValue`。 |
| `greaterThan()` `greaterThanOrEqual()` `lessThan()` `lessThanOrEqual()` | 他们创建一个`BooleanBinding`来包装比较参数的结果。 |
| `isNotNull` `isNull` | 他们创建一个`BooleanBinding`来包装与`null`进行比较的结果。 |
| `max()` `min()` | 它们创建一个绑定,保存该方法的两个参数的最大值和最小值。其中一个参数必须是`ObservableNumberValue`。 |
| `negate()` | 它创建一个`NumberBinding`来保存一个`ObservableNumberValue`的否定。 |
| `not()` | 它创建一个`BooleanBinding`来保存一个`ObservableBooleanValue`的逆。 |
| `or()` | 它创建一个`BooleanBinding`,保存对它的两个`ObservableBooleanValue`参数应用条件`or`操作的结果。 |
Expand Down
19 changes: 6 additions & 13 deletions docs/learn-javafx17/03.md
Original file line number Diff line number Diff line change
Expand Up @@ -314,22 +314,15 @@ Listing 3-3Detecting Changes in an ObservableList
`ListChangeListener.Change`类中的方法

<colgroup><col class="tcol1 align-left"> <col class="tcol2 align-left"></colgroup>
|

方法

|

种类

|
| 方法| 种类|
| --- | --- |
| `ObservableList<E> getList()` | 一般 |
| `boolean next()``void reset()` | 光标移动 |
| `boolean wasAdded()``boolean wasRemoved()``boolean wasReplaced()``boolean wasPermutated()``boolean wasUpdated()` | 更改类型 |
| `int getFrom()``int getTo()` | 受影响范围 |
| `int getAddedSize()``List<E> getAddedSubList()` | 添加 |
| `List<E> getRemoved()``int getRemovedSize()` | 搬迁 |
| `boolean next()` `void reset()` | 光标移动 |
| `boolean wasAdded()` `boolean wasRemoved()` `boolean wasReplaced()` `boolean wasPermutated()` `boolean wasUpdated()` | 更改类型 |
| `int getFrom()` `int getTo()` | 受影响范围 |
| `int getAddedSize()` `List<E> getAddedSubList()` | 添加 |
| `List<E> getRemoved()` `int getRemovedSize()` | 搬迁 |
| `int getPermutation(int oldIndex)` | 排列 |

`getList()`方法在更改后返回源列表。一个`ListChangeListener.Change`对象可以报告多个块中的变化。这可能一开始并不明显。考虑以下代码片段:
Expand Down
31 changes: 3 additions & 28 deletions docs/learn-javafx17/05.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,19 +52,8 @@ JavaFX 类库提供了许多类来表示场景图中的分支和叶节点。`jav
`Scene`类的常用属性

<colgroup><col class="tcol1 align-left"> <col class="tcol2 align-left"> <col class="tcol3 align-left"></colgroup>
|

类型

|

名字

|

属性和描述

|
| 类型 | 名字 | 属性和描述 |
| --- | --- | --- |
| `ObjectProperty<Cursor>` | `cursor` | 它为`Scene`定义了鼠标光标。 |
| `ObjectProperty<Paint>` | `fill` | 它定义了`Scene`的背景填充。 |
Expand Down Expand Up @@ -142,15 +131,8 @@ scene.setCursor(waitCur);
平台类的方法

<colgroup><col class="tcol1 align-left"> <col class="tcol2 align-left"></colgroup>
|

方法

|

描述

|
| 方法 | 描述 |
| --- | --- |
| `void exit()` | 它终止一个 JavaFX 应用程序。 |
| `boolean isFxApplicationThread()` | 如果调用线程是 JavaFX 应用程序线程,则返回`true`。否则返回`false`。 |
Expand Down Expand Up @@ -236,15 +218,8 @@ JavaFX 实现中的一些特性是可选的(或有条件的)。它们可能无
在`ConditionalFeature`枚举中定义的常量

<colgroup><col class="tcol1 align-left"> <col class="tcol2 align-left"></colgroup>
|

枚举常量

|

描述

|
| 枚举常量 | 描述 |
| --- | --- |
| `EFFECT` | 指示滤镜效果的可用性,例如,倒影、阴影等。 |
| `INPUT_METHOD` | 指示文本输入法的可用性。 |
Expand Down
Loading