[英]TornadoFX - remove item with ContextMenu right click option
因此,我有一個表視圖,該表視圖顯示一個Accounts Account(name, login, pass)
的observedArrayList
,它們是數據類。 當我右鍵單擊一個單元格時,會彈出一個刪除選項。 我要做的是從observedArrayList
刪除該Account
只有我找不到任何方法可以做到這一點。 我沒有JavaFX或TornadoFX的經驗,也無法在google或TornadoFX指南和文檔中找到答案。
這是我的代碼:
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)
}
}
}
}
}
謝謝!
selectedItem
是您選擇/右鍵單擊的項目。 然后可以使用arraylist.remove(selectedItem)
為了弄清楚@Martacus的答案,在您的情況下,您只需要替換// HERE IS WHERE THE ITEM DELETE CODE SHOULD BE
使用accounts.remove(this)
// HERE IS WHERE THE ITEM DELETE CODE SHOULD BE
,就可以了。
您也可以更換線
selectedItem?.apply{ accounts.remove(this) }
與
selectedItem?.let{ accounts.remove(it) }
根據我的經驗,當您只是使用一個值而不是設置一個接收器時, let
比apply
更為常見。
請注意,如果異步創建並復制accounts
列表,則過程將有所不同,這是asyncItems { accounts }
的默認行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.