TornadoFX – eliminar elemento con ContextMenu hacer clic derecho

Así que tengo una vista de tabla que muestra una list de list de counts observedArrayList Account(name, login, pass) , esas son classs de datos. Cuando hago clic con el button derecho en una celda, aparece una opción de eliminar. Lo que quiero hacer es eliminar esa Account de la list de observedArrayList

Solo que no puedo encontrar ninguna forma de hacer esto. No tengo experiencia con JavaFX o TornadoFX y tampoco puedo encontrar la respuesta con google o en las guías y documentos de TornadoFX.

Este es mi código:

 class ToolView : View() { override val root = VBox() companion object handler { //val account1 = Account("Google", "martvdham@gmail.com", "kkk") //val account2 = Account("Google", "martvdham@gmail.com", "Password") var accounts = FXCollections.observableArrayList<Account>( ) var gson = GsonBuilder().setPrettyPrinting().create() val ggson = Gson() fun writeData(){ FileWriter("accounts.json").use { ggson.toJson(accounts, it) } } fun readData(){ accounts.clear() FileReader("accounts.json").use{ var account = gson.fromJson(it, Array<Account>::class.java) if(account == null){return} for(i in account){ accounts.add(i) } } } } init { readData() borderpane { center { tableview<Account>{ items = accounts column("Name", Account::name) column("Login", Account::login) column("Password", Account::password) contextMenu = ContextMenu().apply{ menuitem("Delete"){ selectedItem?.apply{// HERE IS WHERE THE ITEM DELETE CODE SHOULD BE} } } } } bottom{ button("Add account").setOnAction{ replaceWith(AddView::class, ViewTransition.SlideIn) } } } } } 

¡Gracias!

Para aclarar la respuesta de @ Martacus, en su caso solo necesita replace // HERE IS WHERE THE ITEM DELETE CODE SHOULD BE con accounts.remove(this) y usted está en el negocio.

También puedes replace la línea

 selectedItem?.apply{ accounts.remove(this) } 

con

 selectedItem?.let{ accounts.remove(it) } 

Desde mi experiencia, let es más común que apply cuando solo estás usando un valor en lugar de configurar un receptor.


Tenga en count que el process será diferente si la list de accounts se construye de forma asincrónica y se copy en, que es el comportamiento pnetworkingeterminado de asyncItems { accounts } .

selectedItem es el elemento que ha seleccionado / right-click. Entonces puedes usar arraylist.remove(selectedItem)

  • Enlazando una vista a una propiedad de controller cambiante
  • tornadoFX togglebutton no tiene propiedad de text
  • Cómo configurar una aplicación Gluon con Kotlin y Tornado FX
  • TornadoFX: el text de la label no se actualiza
  • ¿Hay alguna manera de vincular una propiedad a appConfig en tornadofx?
  • TornadoFX reemplaza el layoutChildren en la región
  • Tornadofx Javafx - Cómo volver a cargar una vista / componente
  • Tornadofx tableview sincroniza dos tablas
  • Las properties vinculadas no funcionan
  • TornadoFX ItemViewModel se actualiza si se cambia el object de respaldo que no expone las properties de JavaFX
  • java.lang.NoSuchMethodException cuando intenta ejecutar la aplicación TornadoFX