getText() 还是 textProperty.getValue() ?-> 文本字段

Nin*_*in 0 java javafx textfield

我正在研究数字的文本字段。我需要将输入从一个文本字段复制到另一个文本字段。

这两者之间有什么区别: FieldTwo.setText(FieldOne.getText()); 和 FieldTwo.setText(FieldOne.textProperty().getValue());

jew*_*sea 5

访问<propertyName>Property()器用于绑定和更改或失效侦听器。这样您就可以对财产的未来变化做出反应。

属性上的访问器getValue()允许您获取当时的属性值。

定义属性时,您只需定义 property() 访问器,客户端就可以访问该属性的完整功能,包括获取和设置当前属性值的能力。但是,如果在定义属性的对象上定义属性值的附加 getter 和 setter,则按照惯例(并使代码更易于阅读)。

该get<propertyName>()方法只是当前属性值的简写。它还允许具有属性的类符合Java bean 命名约定。这对于满足开发人员对类接口的期望并帮助自动化工具(例如 Jackson 或 jaxb 对象序列化或 IDE 代码生成任务)非常有用。

研究属性教程以获取有关定义和使用属性的更多教程。

对于您的示例,如果您希望 fieldOne 的值成为 fieldTwo 的当前值,请使用以下内容:

fieldTwo.setText(fieldOne.getText());
Run Code Online (Sandbox Code Playgroud)

如果您希望 fieldOne 的值始终为 fieldTwo 的值,即使 fieldTwo 发生更改,也可以使用以下命令。

fieldTwo.textProperty().bind(fieldOne.textProperty());
Run Code Online (Sandbox Code Playgroud)

如果您希望 fieldOne 的值始终是 fieldTwo 的值,即使 fieldTwo 发生变化,也可以使用以下命令,反之亦然。

fieldTwo.textProperty().bindBidirectional(fieldOne.textProperty());
Run Code Online (Sandbox Code Playgroud)

请注意,当我这样做时,我遵循了属性引用的另一个命名约定,fieldOne而不是像FieldOne您在问题中那样。始终遵循Java 命名约定。

因此,您可以看到不同的访问器对于不同的访问模式很有用,这就是为什么该库遵循约定来提供对该功能的访问。建议您对编写的任何定义属性的代码遵循类似的约定。

JavaFX 中的属性可能比简单的读写属性更微妙,尽管这些属性是最常见的。

一旦您了解了简单的属性并希望更全面地了解属性功能,请研究:

  • 属性模式食谱
  • 链接食谱的目标是高级用户。
  • 您无需了解链接文章中的所有内容即可使用简单的属性。