Как остановить редактирование с помощью DefaultCellEditor при нажатии отдельного JBtton
-
22-08-2019 - |
Вопрос
Я получил таблицу с пользовательским TableCellEditor (расширяющим DefaultCellEditor) с JFormattedTextField в качестве компонента редактора.
Теперь у меня проблема:когда я нажимаю отдельную кнопку во время редактирования.Когда кнопка нажата, редактор остается "открытым и активным", в то время как я бы хотел, чтобы он прекратил редактирование, чтобы внесенные изменения были доступны для операций, вызванных кнопкой.
Итак, как остановить редактирование при нажатии отдельной кнопки?Я пытался Установите focuslostbehavior(JFormattedTextField.ЗАФИКСИРУЙТЕ) для JFormattedTextField ( форматированное текстовое поле) но, похоже, это не возымело эффекта.
Надеюсь, у кого-нибудь есть несколько хороших идей =)
Решение
Вы можете попробовать
jtable.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
Другие советы
Спасибо asalamon74, это работает довольно хорошо.
В базе данных Sun об ошибках идут дебаты по этому поводу : Ошибка 4724980:JTable - таблица:Добавьте API для управления тем, что происходит с изменениями, когда таблица теряет фокус. (также найдены другие записи об ошибках).Функция terminateEditOnFocusLost включает поведение "зафиксировать или отменить", которое можно увидеть в исходных текстах Java в классе JTable$CellEditorRemover$CellEditorRemover
И да, несколько странно, что это не задокументировано в API и т.д...
Было также больше проблем с этими вещами, смотрите Вопрос Java Качели :изменение выбора JTree при редактировании stopcellediting() :как заставить stopCellEditing() вызываться перед TreeListeners:valueChanged?