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) 
  • Desplazamiento suave en JavaFX TableView
  • Enlazando una vista a una propiedad de controller cambiante
  • tornadofx EventBus expande la fila de la tabla usando el object tableview
  • TornadoFX ¿Cómo crear MDI con una list de models de windows hijas?
  • java.lang.NoSuchMethodException cuando intenta ejecutar la aplicación TornadoFX
  • Animación consecutiva en TornadoFX?
  • TornadoFX ItemViewModel se actualiza si se cambia el object de respaldo que no expone las properties de JavaFX
  • ¿Hay alguna manera de vincular una propiedad a appConfig en tornadofx?
  • Cómo ejecutar tornado fx hello world con java 7
  • tornadoFX togglebutton no tiene propiedad de text
  • Cómo inyectar ItemViewModel en tornadoFx