getText() 或 textProperty.getValue() ? -> 文本域
getText() or textProperty.getValue() ? -> TextFields
我正在处理数字文本字段。我需要将输入从一个文本字段复制到另一个文本字段。
这两者之间有什么区别:
FieldTwo.setText(FieldOne.getText());
和
FieldTwo.setText(FieldOne.textProperty().getValue());
<propertyName>Property()
访问器用于绑定和更改或失效侦听器。这样您就可以对 属性.
的未来更改做出反应
属性 上的 getValue()
访问器允许您获得当时的 属性 值。
定义 属性 后,您只需定义 属性() 访问器,客户端就可以访问 属性 的全部功能,包括能够获取并设置当前 属性 值。但是,如果在定义 属性.
的对象上定义 属性 值的附加 getter 和 setter,这是约定俗成的(并且使代码更易于阅读)
get<propertyName>()
方法只是对当前 属性 值的 shorthand。它还允许 class 的属性符合 Java bean naming conventions。这有助于满足开发人员对 class 接口的期望并有助于自动化工具,例如Jackson 或 jaxb 对象序列化或 IDE 代码生成任务。
学习 property tutorial 以获取有关定义和使用属性的更多教程。
对于您的示例,如果您希望 fieldOne 的值成为 fieldTwo 的当前值,请使用以下内容:
fieldTwo.setText(fieldOne.getText());
如果您希望 fieldOne 的值始终是 fieldTwo 的值,即使在 fieldTwo 发生变化时也如此。
fieldTwo.textProperty().bind(fieldOne.textProperty());
如果您希望 fieldOne 的值始终是 fieldTwo 的值,即使在 fieldTwo 发生变化时,反之亦然。
fieldTwo.textProperty().bindBidirectional(fieldOne.textProperty());
请注意,当我这样做时,我遵循了 属性 引用的另一个命名约定,fieldOne
而不是您在问题中使用的 FieldOne
。始终关注 Java naming conventions.
因此您可以看到,不同的访问器适用于不同的访问模式,这就是库遵循约定来提供对该功能的访问的原因。建议您在编写的任何定义属性的代码中遵循类似的约定。
JavaFX 中的属性可能比简单的读写属性更微妙,尽管它们是最常见的。
一旦您理解了简单的属性并希望更全面地理解 属性 功能,请学习:
- Property pattern cookbook
- 链接的食谱的目标是高级用户。
- 您不需要了解链接文章中的所有内容才能
利用简单的属性。
简而言之:它们return 具有相同的值。在你的情况下,你可以简单地选择较短的 .getText()
,因为它输入的代码更少。
来自文档:
TextProperty
All Implemented Interfaces: Observable, Property<java.lang.String>,
ReadOnlyProperty<java.lang.String>,
ObservableObjectValue<java.lang.String>, ObservableStringValue,
ObservableValue<java.lang.String>,
WritableObjectValue<java.lang.String>, WritableStringValue,
WritableValue<java.lang.String>
您可以看到 TextProperty
存在以支持事件侦听器(观察模式)、绑定,这在您设计某些框架时尤其有用。例如,在典型的 UI 设计器中,您 select 一个 TextInputControl
,属性 网格显示名称(TextProperty.getName()
)、文本等,并且可以在 属性 网格中更新(绑定)它。
我也查了jfx source code
modules\javafx.controls\src\main\java\javafx\scene\control\TextInputControl.java 第 359 行
private TextProperty text = new TextProperty();
public final String getText() { return text.get(); }
public final void setText(String value) { text.set(value); }
public final StringProperty textProperty() { return text; }
这证明了 .getText()
return 来自 TextProperty
的值。
免责声明
我对 javafx 知之甚少,但我熟悉 Windows Forms 和 WPF。我认为 javafx 遵循类似的理念。
我正在处理数字文本字段。我需要将输入从一个文本字段复制到另一个文本字段。
这两者之间有什么区别:
FieldTwo.setText(FieldOne.getText());
和
FieldTwo.setText(FieldOne.textProperty().getValue());
<propertyName>Property()
访问器用于绑定和更改或失效侦听器。这样您就可以对 属性.
属性 上的 getValue()
访问器允许您获得当时的 属性 值。
定义 属性 后,您只需定义 属性() 访问器,客户端就可以访问 属性 的全部功能,包括能够获取并设置当前 属性 值。但是,如果在定义 属性.
的对象上定义 属性 值的附加 getter 和 setter,这是约定俗成的(并且使代码更易于阅读)get<propertyName>()
方法只是对当前 属性 值的 shorthand。它还允许 class 的属性符合 Java bean naming conventions。这有助于满足开发人员对 class 接口的期望并有助于自动化工具,例如Jackson 或 jaxb 对象序列化或 IDE 代码生成任务。
学习 property tutorial 以获取有关定义和使用属性的更多教程。
对于您的示例,如果您希望 fieldOne 的值成为 fieldTwo 的当前值,请使用以下内容:
fieldTwo.setText(fieldOne.getText());
如果您希望 fieldOne 的值始终是 fieldTwo 的值,即使在 fieldTwo 发生变化时也如此。
fieldTwo.textProperty().bind(fieldOne.textProperty());
如果您希望 fieldOne 的值始终是 fieldTwo 的值,即使在 fieldTwo 发生变化时,反之亦然。
fieldTwo.textProperty().bindBidirectional(fieldOne.textProperty());
请注意,当我这样做时,我遵循了 属性 引用的另一个命名约定,fieldOne
而不是您在问题中使用的 FieldOne
。始终关注 Java naming conventions.
因此您可以看到,不同的访问器适用于不同的访问模式,这就是库遵循约定来提供对该功能的访问的原因。建议您在编写的任何定义属性的代码中遵循类似的约定。
JavaFX 中的属性可能比简单的读写属性更微妙,尽管它们是最常见的。
一旦您理解了简单的属性并希望更全面地理解 属性 功能,请学习:
- Property pattern cookbook
- 链接的食谱的目标是高级用户。
- 您不需要了解链接文章中的所有内容才能 利用简单的属性。
简而言之:它们return 具有相同的值。在你的情况下,你可以简单地选择较短的 .getText()
,因为它输入的代码更少。
来自文档: TextProperty
All Implemented Interfaces: Observable, Property<java.lang.String>, ReadOnlyProperty<java.lang.String>, ObservableObjectValue<java.lang.String>, ObservableStringValue, ObservableValue<java.lang.String>, WritableObjectValue<java.lang.String>, WritableStringValue, WritableValue<java.lang.String>
您可以看到 TextProperty
存在以支持事件侦听器(观察模式)、绑定,这在您设计某些框架时尤其有用。例如,在典型的 UI 设计器中,您 select 一个 TextInputControl
,属性 网格显示名称(TextProperty.getName()
)、文本等,并且可以在 属性 网格中更新(绑定)它。
我也查了jfx source code modules\javafx.controls\src\main\java\javafx\scene\control\TextInputControl.java 第 359 行
private TextProperty text = new TextProperty();
public final String getText() { return text.get(); }
public final void setText(String value) { text.set(value); }
public final StringProperty textProperty() { return text; }
这证明了 .getText()
return 来自 TextProperty
的值。
免责声明
我对 javafx 知之甚少,但我熟悉 Windows Forms 和 WPF。我认为 javafx 遵循类似的理念。