javafx: пользовательский TableColumn

Я хочу сделать заказ TableColumn что, когда в редактируемом состоянии его ячейки будут автоматически заполнены TextFields, вот что я попробовал:

public static <T,S> void setAutoCompleteTableColumn(TableColumn<T,S> column, List items){
    column.setCellFactory(param -> {
        return new TableCell<T, S>(){
            final TextField textField = new TextField();

            @Override
            protected void updateItem(S item, boolean empty) {
                super.updateItem(item, empty);

                if(item == null){
                    setGraphic(null);
                }else {

                    setGraphic(textField);
                    AutoCompletionBinding<T> binding = TextFields.bindAutoCompletion(textField,items);
                    binding.setOnAutoCompleted(event ->{
                        //handleCompleted.accept(event.getCompletion());
                    });
                }

            }
        };
    });
}

Этот код произвел (очевидно) это:

введите описание изображения здесь

Но я хочу эту форму только тогда, когда TableView находится в режиме редактирования, поэтому я сделал это вместо этого:

public static <T,S> void setAutoCompleteTableColumn(TableColumn<T,S> column, List items){
    column.setCellFactory(param -> {
        return new TableCell<T, S>(){
            final TextField textField = new TextField();

            @Override
            protected void updateItem(S item, boolean empty) {
                super.updateItem(item, empty);

                if(item == null){
                    setGraphic(null);
                }else {
                    editableProperty().addListener((obs, oldValue, newValue)->{
                        if(newValue){
                            setGraphic(textField);
                        }else{
                            setText(item.toString());
                        }
                    });

                    AutoCompletionBinding<T> binding = TextFields.bindAutoCompletion(textField,items);
                    binding.setOnAutoCompleted(event ->{
                        //handleCompleted.accept(event.getCompletion());
                    });
                }

            }
        };
    });


}

Как вы можете видеть, я добавил слушателя editableProperty, что ни к чему не привело. То, что я хочу, это редактируемый TableColumn, как здесь, но с автоматическим завершением TextField, Есть идеи, как этого добиться?

0 ответов

Другие вопросы по тегам