makeeditable не работает при настройке cellFormat

У меня есть следующая таблица:

with(myTable)
{
    enableCellEditing()
    columnResizePolicy = SmartResize.POLICY
    isEditable = true
    column("Issue Date", TradeEntity::issueDate).makeEditable().cellFormat { tc ->
        style { if (tc.dayOfMonth==10) backgroundColor += Color.ORANGE }
        text = tc.toString()
    }

Я не могу сделать это редактируемым и иметь стиль. Либо у меня есть стиль, либо его можно редактировать... Любая помощь?

EDIT Решено, по крайней мере, в Java, я думаю, это все потому, что я не вызывал super.updateItem(it,empty) в Котлине


person dgan    schedule 26.02.2018    source источник
comment
Почему ты не можешь это сделать? С какой ошибкой вы сталкиваетесь?   -  person Aleksandar Stefanović    schedule 26.02.2018
comment
У меня нет ошибок. Возможность редактирования просто исчезает, как только я добавляю .cellFormat   -  person dgan    schedule 27.02.2018


Ответы (2)


cellFormat заменит CellFactory, установленный при вызове makeEditable(), поэтому они находятся в прямой конкуренции друг с другом. По этой причине TornadoFX предоставляет cellDecorator, который сохраняет существующий CellFactory:

column("First Name", Customer::firstNameProperty) {
    makeEditable()
    cellDecorator {
        style {
            fontWeight = FontWeight.BOLD
        }
    }
}
person Edvin Syse    schedule 27.02.2018
comment
Спасибо за помощь, Эдвин, и мне очень нравится ваша библиотека :) - person dgan; 27.02.2018

Хорошо, я не знаю, почему нет ответов, но мне каким-то образом удалось сделать это на Java благодаря учебнику по Oracle 2013 года https://docs.oracle.com/javafx/2/ui_controls/table-view.htmи для автоконкуренции Intellij. Теперь я должен сделать это в Котлине

Callback<TableColumn<Person, String>, TableCell<Person, String>> cb = new Callback<TableColumn<Person, String>, TableCell<Person, String>>()
{
    @Override
    public TableCell<Person, String> call(TableColumn<Person, String> param) {


        TextFieldTableCell res = new TextFieldTableCell<Person, String>(new DefaultStringConverter()) {
            @Override
            public void updateItem(String it, boolean empty) {
                super.updateItem(it, empty);
                if (it == null || empty) {
                    setText(null);
                    setStyle("");
                } else {
                    setText(it);
                    setStyle("-fx-background-color: red");

                }

            }
        };
        System.out.println("callback called");
        return res;
    }
};

yourColumn.setCellFactory(cb);
person dgan    schedule 26.02.2018