Вы никогда не должны использовать:
table.setRowHeight(row, (int)getPreferredSize().height);
в рендере.Это приведет к бесконечному циклу, так как всякий раз, когда вы изменяете высоту строки, таблица перерисовывает () строку, и когда вызывается рендерер, вы снова изменяете высоту строки ....
Избавьтесь от этой строкикод.Вместо этого вы можете вычислить высоту строки при добавлении строки в таблицу.Добавьте этот код в конец метода add ():
int row = table.getRowCount() - 1;
Component comp = table.prepareRenderer(table.getCellRenderer(row, 0), row, 0);
int rowHeight = comp.getPreferredSize().height;
table.setRowHeight(row, rowHeight);
Обновление:
Код работает без специального редактора.Так что проблема в редакторе.Посмотрите на исходный код AbstractCellEditor, чтобы увидеть, что происходит, когда редактирование прекращается.Это вызывает событие, чтобы уведомить таблицу, чтобы редактор мог быть удален.У вас нет этого кода.Поэтому я предлагаю вам расширить AbstractCellEditor вместо расширения customPanel
, чтобы вы могли легко запустить соответствующее событие.
Кроме того, я считаю, что нажатие на строку вызовет редактор, поэтому вам нужно удалить редактор перед тем, какВы удаляете строку из модели.См. Table Stop Editing для нескольких способов сделать это.