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

编辑单元格javaFX后在tableview中恢复oldValue,java,javafx-2,tableview,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

您好,我正在跟踪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());
        }
    }
);
bookName.setOnEditCommit(
新的EventHandler(){
@凌驾
公共无效句柄(TableColumn.CellEditEvent t){
如果(t.getNewValue().equals(“”| | t.getNewValue().length()<3){
info.setText(“图书名称必须大于3个字符”);
//设置旧值或不更新单元格。
返回;
}
((Books)t.getTableView().getItems().get(
t、 getTablePosition().getRow()).setBookName(t.getNewValue());
}
}
);

问题是,如果我编辑一个单元格,它只接受新值,但如果字符串为空且少于3个字符,我不想更新单元格值。

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

实际上,实际项保持不变,尽管表中显示了新值。因此,我要做的是删除该项并将其设置为旧项

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);
        }
qtyColumn.setOnEditCommit((TableColumn.CellEditEvent事件)->{
TestObject to=event.getTableView().getItems().get(event.getTablePosition().getRow());
试一试{
if(event.getNewValue()<0){
抛出新异常(“您可能想在此处放置错误消息”);
}否则{
to.setQty(event.getNewValue());
}
}捕获(例外e){
//创建一些对话框以显示错误
event.getTableView().getItems().set(event.getTablePosition().getRow(),to);
}

就我而言,它是有效的。

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

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

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);
        }
qtyColumn.setOnEditCommit((TableColumn.CellEditEvent事件)->{
TestObject to=event.getTableView().getItems().get(event.getTablePosition().getRow());
试一试{
if(event.getNewValue()<0){
抛出新异常(“您可能想在此处放置错误消息”);
}否则{
to.setQty(event.getNewValue());
}
}捕获(例外e){
//创建一些对话框以显示错误
event.getTableView().getItems().set(event.getTablePosition().getRow(),to);
}

就我而言,它是有效的。

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

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

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);
        }
qtyColumn.setOnEditCommit((TableColumn.CellEditEvent事件)->{
TestObject to=event.getTableView().getItems().get(event.getTablePosition().getRow());
试一试{
if(event.getNewValue()<0){
抛出新异常(“您可能想在此处放置错误消息”);
}否则{
to.setQty(event.getNewValue());
}
}捕获(例外e){
//创建一些对话框以显示错误
event.getTableView().getItems().set(event.getTablePosition().getRow(),to);
}

就我而言,它是有效的。

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

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

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);
        }
qtyColumn.setOnEditCommit((TableColumn.CellEditEvent事件)->{
TestObject to=event.getTableView().getItems().get(event.getTablePosition().getRow());
试一试{
if(event.getNewValue()<0){
抛出新异常(“您可能想在此处放置错误消息”);
}否则{
to.setQty(event.getNewValue());
}
}捕获(例外e){
//创建一些对话框以显示错误
event.getTableView().getItems().set(event.getTablePosition().getRow(),to);
}

在我的例子中,它是有效的。

当备份数据模型未更新但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());
        }
    }
);
bookName.setOnEditCommit(
新的EventHandler(){
@凌驾
公共无效句柄(TableColumn.CellEditEvent t){
如果(t.getNewValue().equals(“”| | t.getNewValue().length()<3){
info.setText(“图书名称必须大于3个字符”);
//刷新渲染值的变通方法
t、 getTableView().getColumns().get(0).setVisible(false);
t、 getTableView().getColumns().get(0).setVisible(true);
//设置旧值或不更新单元格。
返回;
}
((Books)t.getTableView().getItems().get(
t、 getTablePosition().getRow()).setBookName(t.getNewValue());
}
}
);

如果未更新备份数据模型,但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());
        }
    }
);
bookName.setOnEditCommit(
新的EventHandler(){
@凌驾
公共无效句柄(TableColumn.CellEditEvent t){
如果(t.getNewValue().equals(“”| | t.getNewValue().length()<3){
info.setText(“图书名称必须大于3个字符”);
//刷新渲染值的变通方法
t、 getTableView().getColumns().get(0).setVisible(false);
t、 getTableView().getColumns().get(0).setVisible(true);
//设置旧值或不更新单元格。
返回;
}
((Books)t.getTableView().getItems().get(
t、 getTablePosition().getRow()).setBookName(t.getNewValue());
}
}
);

当备份数据模型未更新,但tableview显示新的编辑值时,表示tableview未刷新渲染值。要强制刷新