КонтекстNatTable IColumnAccessor.setDataValue вызывается дважды
я реализовал NatTable (v1.1.0.201405012245) - пожалуйста, рассмотрите этот упрощенный пример:
Конечно, это не реальный код, но моя проблема также может быть продемонстрирована с помощью этого кода.
Важная часть заключается в том, что в моем фактическом проекте, когда пользователь изменяет значение, мне нужно обновить модель (включая сложное дерево зависимостей), и если это не сработает (например, при численном вычислении это изменение приводит к деление на ноль), мне нужно показать ошибку (и вернуться к предыдущему значению).
Чтобы показать свою основную проблему, в приведенном здесь коде я проверяю простое условие в IColumnAccessor#setDataValue
(вход содержит «x») и соответственно показывает ошибку.
Проблема
Моя актуальная проблема в том, что если вы вводите й в TextCellEditor, диалоговое окно ошибки появляется дважды (в последовательности - это означает, что, как только для первой, второй я нажимаю КИ один покажет).
Анализ
Мой анализ показывает, что причина в том, что setDataValue вызывается дважды:
, поскольку ключ ENTER нажата - StackTrace
TextCellEditor(AbstractCellEditor).commit(SelectionLayer$MoveDirectionEnum, boolean) line: 331
TextCellEditor(AbstractCellEditor).commit(SelectionLayer$MoveDirectionEnum) line: 326
TextCellEditor$1.keyPressed(KeyEvent) line: 246
потому что TextCellEditor теряет фокус - StackTrace
TextCellEditor(AbstractCellEditor).commit(SelectionLayer$MoveDirectionEnum, boolean, boolean) line: 341
TextCellEditor(AbstractCellEditor).commit(SelectionLayer$MoveDirectionEnum, boolean) line: 331
AbstractCellEditor$InlineFocusListener.focusLost(FocusEvent) line: 462
Итак, мой главный вопрос: как я могу предотвратить (или, по крайней мере, обнаружить) второе событие?
Не могли бы вы удалить или отменить регистрацию одного из слушателей, например. Прослушиватель KeyPress? – darijan
@ darijan любые предложения как? Я вообще не регистрирую слушателей, все это происходит внутри NatTable API ... –
Мне очень жаль, но нет. У меня большой опыт работы с swt.Tables и TextCellEditors, но не с этой библиотекой ... Это была просто идея. – darijan