Cómo instalar un controller de clics en una vista de list dinámica (en tornadofx)

Mi aplicación necesita permitir adiciones a la list. He descubierto cómo puedo agregar dinámicamente a una vista de list usando observableArrayList . Si hago clic en el button, se agrega un elemento a la list y se muestra.

Ahora estoy luchando por agregar un manejador de clics (quiero manejar el evento que ocurre cuando alguien hace clic en cualquier elemento dentro de la vista de list). ¿Dónde hago esto?

Aquí está mi código.

 package someapp import javafx.collections.FXCollections import javafx.geometry.Pos import javafx.scene.layout.VBox import javafx.scene.text.FontWeight import tornadofx.* class MyApp : App(HelloWorld::class) { } class HelloWorld : View() { val leftSide: LeftSide by inject() override val root = borderpane { left = leftSide.root } } class LeftSide: View() { var requestView: RequestView by singleAssign() override val root = VBox() init { with(root) { requestView = RequestView() this += requestView this += button("Add Item") { action { requestView.responses.add( Request( "example.com", "/foo/bar", "{ \"foo\" : \"bar\"}".toByteArray())) } } } } } class RequestView : View() { val responses = FXCollections.observableArrayList<Request>( ) override val root = listview(responses) { cellFormat { graphic = cache { form { fieldset { label(it.hostname) { alignment = Pos.CENTER_RIGHT style { fontSize = 22.px fontWeight = FontWeight.BOLD } } field("Path") { label(it.path) } } } } } } } class Request(val hostname: String, val path: String, val body: ByteArray) { } 

Para configurar una callback cuando se selecciona un elemento en un ListView, use la onUserSelect llamada onUserSelect :

 onUserSelect { information("You selected $it") } 

Opcionalmente, puede pasar cuántos clics constituye una selección también, el valor pnetworkingeterminado es 2:

 onUserSelect(1) { information("You selected $it") } 

Está utilizando algunas construcciones obsoletas en su código, aquí hay una versión actualizada convertida a las mejores prácticas 🙂

 class MyApp : App(HelloWorld::class) class HelloWorld : View() { override val root = borderpane { left(LeftSide::class) } } class LeftSide : View() { val requestView: RequestView by inject() override val root = vbox { add(requestView) button("Add Item").action { requestView.responses.add(Request("example.com", "/foo/bar", """{ "foo" : "bar"}""".toByteArray())) } } } class RequestView : View() { val responses = FXCollections.observableArrayList<Request>() override val root = listview(responses) { cellFormat { graphic = cache { form { fieldset { label(it.hostname) { alignment = Pos.CENTER_RIGHT style { fontSize = 22.px fontWeight = FontWeight.BOLD } } field("Path") { label(it.path) } } } } } onUserSelect(1) { information("You selected $it") } } } class Request(val hostname: String, val path: String, val body: ByteArray) 
  • ¿Hay alguna manera de vincular una propiedad a appConfig en tornadofx?
  • Cómo crear una pantalla de inicio en tornadofx
  • La compilation de Gradle no puede encontrar tornadofx en Linux
  • TornadoFX ¿Cómo crear MDI con una list de models de windows hijas?
  • ¿Cómo puedo crear un encabezado de columna nested / dividido usando TornadoFx?
  • Enlazando una vista a una propiedad de controller cambiante
  • ¿Cómo llenar el ancho de la tabla disponible con columnas?
  • TornadoFX con TestFX cierra la vista después de cada TestCase
  • TornadoFX cómo enlazar Node style (o styleClass) a una propiedad?
  • java.lang.NoSuchMethodException cuando intenta ejecutar la aplicación TornadoFX
  • Columnas de tabla dinámica