Чтобы понять это, вам нужно понять, что происходит с редактируемой таблицей. Краткая теория:
В каждой ячейке есть потенциальный рендер и редактор. Средство визуализации просто сообщает ячейке, как рисовать, и не взаимодействует с событиями. Редактор, однако, является компонентом, который может взаимодействовать с событиями. Когда происходит событие, которое вызывает редактирование, компонент редактора добавляется поверх таблицы. Когда редактирование заканчивается, компонент удаляется.
Чтобы компонент исчез, вам нужно убедиться, что ячейка еще не находится в состоянии «редактирования». Вот почему terminateEditOnFocusLast вызывает исчезновение JComboBox. Если вы хотите, чтобы другие параметры были активированы, вам, вероятно, потребуется вызвать removeEditor () в ответ на определенные события, возможно, фокус или выбор ячейки.
Чтобы по-настоящему разобраться в том, что происходит, я бы порекомендовал быстро взглянуть на исходный код, чтобы удалитьEditor (), editCellAt () и т. Д., И, возможно, один раз пройти через отладчик. Возможно, вы переопределили часть кода обработки событий или вызываете его, когда этого не следует делать. Код редактора / обработки событий в JTable довольно хрупок, и довольно легко случайно получить вызовы в неправильном порядке с забавными побочными эффектами.
Кроме того, Java очень тонко изменила поведение событий и фокуса JTable между версиями один раз, я думаю, что это было между 1.4 и 1.5, когда обработка фокуса для свинга изменилась. Поэтому первое, что я бы порекомендовал попробовать, это ваш код с другой версией Java. Возможно, ошибка была вызвана Sun (некоторые из нашего сложного кода редактора пришлось изменить), и если он отличается в разных выпусках, его легче сообщить Sun.