Javafx:按钮单击时表列提交

时间:2017-01-25 15:32:59

标签: javafx tableview

我的方法是根据此tutorial制作TableColumn可编辑的广告,此question女巫推荐的两项更改正在focusedProperty更改为setOnAction 1}}并添加绑定。方法是这样的:

public static <T> void setAutoCompleteTableColumn(TableColumn<T,String> column, BiConsumer<T, String> field, String type, BiConsumer handleUpdates, List autoComplete){
    column.setCellFactory(param -> {
        return new TableCell<T, String>(){
            private TextField textField;

            @Override
            public void startEdit() {
                super.startEdit();
                createTextField();
                setText(null);
                setGraphic(textField);
                textField.selectAll();
            }

            @Override
            public void cancelEdit() {
                super.cancelEdit();
                setText((String) getItem());
                setGraphic(null);
            }


            @Override
            protected void updateItem(String item, boolean empty) {
                super.updateItem(item, empty);
                if (empty) {
                    setText(null);
                    setGraphic(null);
                } else {

                    if (isEditing()) {
                        if (textField != null) {
                            textField.setText(getString());
                        }
                        setText(null);
                        setGraphic(textField);
                    } else {
                        setText(getString());
                        setGraphic(null);
                    }
                }
            }

            private void createTextField(){
                textField = new TextField(getString());
                textField.setMinWidth(this.getWidth() - this.getGraphicTextGap()* 2);
                textField.setOnAction(event ->{
                    if(textField.getText() != ""){
                        commitEdit(textField.getText());
                    }
                });

                AutoCompletionBinding<T> binding = TextFields.bindAutoCompletion(textField,autoComplete);
            }

            private String getString() {
                return getItem() == null ? "" : getItem().toString();
            }
        };
    });
    column.setOnEditCommit(event -> {
        T model = event.getRowValue();
        if (!event.getNewValue().isEmpty()) {
            Cloner cloner = new Cloner();
            final T oldModel = cloner.deepClone(model);

            //Update the old value with the new value
            field.accept(model, event.getNewValue());

            //Retrieve changes
            handleUpdates.accept(oldModel, model);
        }
    });

}

我在控制器中使用此方法,如下所示:

TableColumn<Purchase, String> nameColumn = new TableColumn<>();
setAutoCompleteTableColumn(nameColumn, (p,s) -> validatePurchaseEdit(p,s), "text", (o, n) -> updateTracker(o, n), appState.items);

我有一个按钮点击事件,可将TableView可编辑切换为false。 出于某种原因,当执行此事件时,我正在编辑的当前单元格确实提交了编辑,但是另一个单元格(随机单元格)切换到编辑模式。有人可以解释发生了什么,我怎样才能让所有单元格都进行编辑?

0 个答案:

没有答案