簡體   English   中英

編輯單元格javaFX后在tableview中還原oldValue

[英]Restore oldValue in tableview after editing the cell javaFX

嗨,我正在關注Oracle網站上的AddressBook示例。

bookName.setOnEditCommit(
    new EventHandler<TableColumn.CellEditEvent<Books, String>>() {
        @Override
        public void handle(TableColumn.CellEditEvent<Books, String> t) {
            if (t.getNewValue().equals("") || t.getNewValue().length() < 3) {
                info.setText("Book name must be greater than 3 characters.");
                // set the old value or do not update the cell.
                return;
            }
            ((Books) t.getTableView().getItems().get(
                t.getTablePosition().getRow())).setBookName(t.getNewValue());
        }
    }
);

問題是如果我編輯一個單元格,它只是采用newvalue,但是如果字符串為空且少於3個字符,我不想更新該單元格的值。

當未更新支持數據模型但表視圖顯示新的編輯值時,這意味着表視圖不會刷新呈現的值。 要強制刷新,請執行以下操作:

bookName.setOnEditCommit(
    new EventHandler<TableColumn.CellEditEvent<Books, String>>() {
        @Override
        public void handle(TableColumn.CellEditEvent<Books, String> t) {
            if (t.getNewValue().equals("") || t.getNewValue().length() < 3) {
                info.setText("Book name must be greater than 3 characters.");

                // workaround for refreshing rendered values
                t.getTableView().getColumns().get(0).setVisible(false);
                t.getTableView().getColumns().get(0).setVisible(true);

                // set the old value or do not update the cell.
                return;
            }
            ((Books) t.getTableView().getItems().get(
                t.getTablePosition().getRow())).setBookName(t.getNewValue());
        }
    }
);

如果您尚未找到解決方案,請嘗試以下方法:

實際上,盡管表顯示了新值,但實際項目保持不變。 所以我要做的是刪除該項目,然后將其設置為舊的。

qtyColumn.setOnEditCommit((TableColumn.CellEditEvent<TestObject, Integer> event) -> {
TestObject to = event.getTableView().getItems().get(event.getTablePosition().getRow());
        try {
            if (event.getNewValue() < 0) {
                throw new Exception("You might wanna put error messages here");
            } else {
                to.setQty(event.getNewValue());
            }
        } catch (Exception e) {
            //Make some dialog to show error
            event.getTableView().getItems().set(event.getTablePosition().getRow(), to);
        }

就我而言,它有效。

暫無
暫無

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

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