Nin*_*in 0 java javafx textfield
我正在研究数字的文本字段。我需要将输入从一个文本字段复制到另一个文本字段。
这两者之间有什么区别:
FieldTwo.setText(FieldOne.getText());
和
FieldTwo.setText(FieldOne.textProperty().getValue());
访问<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 中的属性可能比简单的读写属性更微妙,尽管这些属性是最常见的。
一旦您了解了简单的属性并希望更全面地了解属性功能,请研究: