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 遵循类似的理念。