javafx:自定义表格列

时间:2017-01-16 14:11:53

标签: javafx autocomplete tablecolumn

我想制作一个自定义TableColumn,当处于可编辑状态时,它的单元格将自动完成TextField,这是我尝试过的:

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

            }
        };
    });
}

这段代码产生了(显然):

enter image description here

但是我只想在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,如here,但自动完成TextField。知道怎么做到这一点吗?

0 个答案:

没有答案