簡體   English   中英

TornadoFX-使用ContextMenu右鍵單擊選項刪除項目

[英]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) }

根據我的經驗,當您只是使用一個值而不是設置一個接收器時, letapply更為常見。


請注意,如果異步創建並復制accounts列表,則過程將有所不同,這是asyncItems { accounts }的默認行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM