Forma adecuada para unir una propiedad a un valor derivado de un control en JavaFX / TornadoFX

xaser:

Considere el ejemplo siguiente, que tiene como objetivo (Kotlin / tornadofx) para conectar el contenido de un campo de texto con el texto de una etiqueta a través de la unión. La etiqueta debe reflejar un valor derivado del campo de texto, en este caso el hash. ¿Cómo puedo lograr esto adecuadamente vinculante (Siento que el uso de un changelistener no es la forma correcta de ir).

class HashView : View("My View") {
    val hashProperty = SimpleStringProperty("EMPTY")

    override val root = vbox {
        textfield {
            hashProperty.bind(stringBinding(text) { computeHash(text)}) // This does not work
        }
        label(hashProperty)
    }
}

PD: respuestas en java / JavaFX también son bienvenidos siempre que de alguna manera me puedo aplicar la idea en tornadofx también.

ACTUALIZACIÓN 1 : He descubierto que no era más que un pequeño cambio necesario para hacer mi ejemplo de trabajo, es decir, que debe ser

hashProperty.bind(stringBinding(textProperty() { computeHash(this.value) })

No soy sin embargo, todavía con certeza si esta es la forma convencional de hacerlo. Así que voy a dejar esta cuestión abierta.

Edvin Sysendammen:

Recomiendo no involucrar a las propiedades de los elementos de entrada reales en los cálculos. Debe definir la propiedad de entrada primero y se unen a que el campo de texto. A continuación, crear un derivado StringBindingse unen y que a la etiqueta. También tenga en cuenta que una propiedad se ha construido en la stringBindingfunción que funciona automáticamente en esa propiedad. Esto hace que su código aspecto mucho más limpio, se puede volver a utilizar, si es necesario y es más fácil de mantener:

class HashView : View("My View") {
    val inputProperty = SimpleStringProperty()
    val hashProperty = inputProperty.stringBinding { computeHash(it ?: "EMPTY") }

    override val root = vbox {
        textfield(inputProperty)
        label(hashProperty)
    }

    fun computeHash(t: String) = "Computed: $t"
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=208480&siteId=1
Recomendado
Clasificación