Обновить логическое значение в пользовательском логическом TableCell (с шаблоном и флажком) - PullRequest
0 голосов
/ 02 мая 2020

У меня есть класс, который можно инициализировать с некоторыми объектами и представлять логические значения:

package controller.menuResponsability.element;

import application.objects.ObjectCOR;
import controller.AppController;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ContentDisplay;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.util.Callback;

public class BooleanColumn<T extends ObjectCOR> extends TableColumn<T, Boolean> {
    private Callback<TableColumn<T, Boolean>, TableCell<T, Boolean>> cellFactory;

    final Class<? extends ObjectCOR> typeParameterClass;

    public BooleanColumn(String s, Class<? extends ObjectCOR> typeParameterClass) {
        super(s);
        this.typeParameterClass = typeParameterClass;
        cellFactory = new Callback<TableColumn<T, Boolean>, TableCell<T, Boolean>>() {
            @Override
            public TableCell<T, Boolean> call(TableColumn<T, Boolean> param) {
                final TableCell<T, Boolean> cell = new TableCell<T, Boolean>() {
                    private CheckBox checkBox;
                    {
                        checkBox = new CheckBox();
                        checkBox.setDisable(true);

                        this.setGraphic(checkBox);
                        this.setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
                        this.setEditable(true);
                    }

                    @Override
                    public void startEdit() {
                        super.startEdit();
                        if (isEmpty()) {
                            return;
                        }
                        checkBox.setDisable(false);
                        checkBox.requestFocus();
                    }

                    @Override
                    public void cancelEdit() {
                        super.cancelEdit();
                        checkBox.setDisable(true);
                    }

                    @Override
                    public void updateItem(Boolean item, boolean empty) {
                        super.updateItem(item, empty);
                        if (!isEmpty()) {
                                checkBox.setSelected(item);
                                T obj = getTableView().getItems().get(getIndex());
                                // Update boolean value of the object
                                AppController.getInstance().getDAO(typeParameterClass).update(obj);
                            }


        }
                };
                return cell;
            }
        };

    setCellFactory(cellFactory);
    }

}

Я хочу использовать этот столбец для классов с 2 или 3 логическими значениями. Тогда имя функции установки не совпадает, и я не знаю, как обновить значение логического значения, связанного с флажком.

Может кто-нибудь мне помочь?

...