JavaFX8 - Как удалить TableCell, который имеет всплывающую подсказку?

Я хочу удалить TableCells из моего TableView. Поэтому я называю эту строку:

table.getItems().remove(item);

TableCell удаляется правильно, но всплывающая подсказка будет показана на следующей TableCell. Например: когда я удаляю первую ячейку, всплывающая подсказка будет отображаться во второй ячейке (которая теперь является первой). Как мне избежать этой проблемы?

Моя CellFactory выглядит так:

    column.setCellFactory(c -> {
    TableCell<DataItem, DataItem> cell = new TableCell<DataItem, DataItem>() {
        @Override
        protected void updateItem(DataItem item, boolean empty) {
            super.updateItem(item, empty);
            if (item != null) {
                setText(item.getName());
                if (item.getDescription() != null && !item.getDescription().isEmpty()) {
                    setTooltip(new Tooltip(item.getDescription()));
                }
            }
        }
    };
    return cell;
});

1 ответ

Решение

Обрабатывать случай, когда item нулевой. Если вы думаете с точки зрения "удаления данных из модели таблицы" вместо "удаления ячеек" (вы вообще не удаляете ни одной ячейки, вы просто меняете данные, отображаемые существующими ячейками), это должно иметь смысл,

column.setCellFactory(c -> {
    TableCell<DataItem, DataItem> cell = new TableCell<DataItem, DataItem>() {
        @Override
        protected void updateItem(DataItem item, boolean empty) {
            super.updateItem(item, empty);
            if (item == null) {
                setText(null);
                setTooltip(null);
            } else {
                setText(item.getName());
                if (item.getDescription() != null && !item.getDescription().isEmpty()) {
                    setTooltip(new Tooltip(item.getDescription()));
                } else {
                    // may need something here, depending on your application logic...
                }
            }
        }
    };
    return cell;
});
Другие вопросы по тегам