繁体   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