简体   繁体   English

在 javafx tableview 中取消编辑

[英]Cancel edit in javafx tableview

I am fairly new in JavaFX.我是 JavaFX 的新手。 I have a table having multiple columns and a refresh button in each row.我有一个表,每行有一个多列和一个刷新按钮。 I am trying to set the old value in the edited cells whenever I click Refresh button.每当我单击“刷新”按钮时,我都试图在已编辑的单元格中设置旧值。 One idea is Passing the old value through a global variable to refresh button and set it.一种想法是通过全局变量传递旧值以刷新按钮并设置它。 I can get the old value But how can I set that old value?我可以获得旧值但是如何设置旧值? here is my code这是我的代码

 String old=null;

public void initialize(URL arg0, ResourceBundle arg1) {

            colName.setCellValueFactory(new PropertyValueFactory<ModelBrBuilding,String>("BranchName"));
            colName.setCellFactory(TextFieldTableCell.forTableColumn());
            colName.setOnEditCommit(
                    new EventHandler<CellEditEvent<ModelBrBuilding, String>>() {
                        @Override
                        public void handle(CellEditEvent<ModelBrBuilding, String> t) {
                     old= ((ModelBrBuilding) t.getTableView().getItems().get(
                                t.getTablePosition().getRow())
                                ).getBranchName();
                            ((ModelBrBuilding) t.getTableView().getItems().get(
                                    t.getTablePosition().getRow())
                                    ).setBranchName(t.getNewValue());
                        }
                    }
                );
colAction.setCellFactory(col -> {

                Button RefreshButton = new Button("Refresh");                                      
                hbox.getChildren().add(RefreshButton);

                TableCell<ModelBrBuilding, ModelBrBuilding> cell = new TableCell<ModelBrBuilding, ModelBrBuilding>() {
                    @Override
                    //Updating with the number of row 
                    public void updateItem(ModelBrBuilding building, boolean empty) {
                        super.updateItem(building, empty);
                        if (empty) {
                            setGraphic(null);
                        } else {
                            setGraphic(RefreshButton);
                        }
                    }

                };                                                  
                RefreshButton.setOnAction(event->{

                    //here I need to set the old value

                });                        
                return cell ;
            });

Can any one give me idea how can I do that?任何人都可以让我知道我该怎么做?

Finally, I have found my answer which is working最后,我找到了有效的答案

RefreshButton.setOnAction(event -> {                
    ModelBrBuilding buildin = new ModelBrBuilding();                                                
    int i = tableBuilding.getSelectionModel().getSelectedIndex();                      
    buildin.setBranchName(old);

    tableBuilding.getItems().set(i, buildin);               
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM