编辑单元格javaFX后,在tableview中恢复oldValue

时间:2013-12-27 10:02:51

标签: java javafx-2 tableview

您好我正在关注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,但如果string为空的少于3个char,我不想更新单元格值。

2 个答案:

答案 0 :(得分:2)

如果未更新后备数据模型但tableview显示新编辑的值,则表示tableview不会刷新呈现的值。要强制刷新,请执行以下操作:

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());
        }
    }
);

答案 1 :(得分:1)

如果您还没有找到解决方案,请尝试我的:

实际上,真实项目保持不变,尽管表格显示了新值。所以我所做的就是删除项目并将其设置为旧项目。

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);
        }

就我而言,它有效。