Платформа NetBeans - как получить обратный вызов, когда свойство начинает / заканчивает редактирование - PullRequest
0 голосов
/ 25 мая 2010

В моем домене есть объекты, которые постоянно обновляются отдельным процессом, и я хочу, чтобы PropertySheetView отображал изменяющиеся свойства. Текущая реализация настроена таким образом, что базовый объект модели домена является неизменным, и, таким образом, при его изменении появляется новый объект, опубликованный с соответствующим идентификатором. В этот момент мой узел, обертывающий объект, подписался, получает обновленный объект с соответствующим идентификатором и воссоздает лист (через createSheet ()) и вызывает setSheet с обновленной информацией. Это прекрасно работает при постоянном отображении самой последней версии объекта модели домена.

Однако некоторые свойства не только для чтения, но могут быть установлены. Я бы хотел, чтобы лист не обновлялся и не перезаписывался, либо на основе строк, либо на основе листа, пока редактируется свойство. Для этого мне нужно прослушать начальные и конечные вызовы редактирования, чтобы я мог знать, когда безопасно обновлять лист снова.

Это важно для моего приложения; в нынешнем виде вы не можете ввести новое значение до того, как обновится лист, и редактирование исчезнет.

Если это имеет значение, я использую пользовательский PropertyEditorSupport, но по умолчанию InplaceEditor.

Я много занимался поиском по источнику NetBeans и не вижу открытых настроек API для прослушивания этого материала.

SheetCellEditor (org.openide.explorer.propertysheet) предоставляет метод addCellEditorListener, но A) я не могу понять, как получить дескриптор экземпляра SheetCellEditor, и B) методы, предоставляемые SheetCellEditor editCanceled и editStopped - обратного вызова для редактирования не началось! Кажется очень глупым. SheetTable и BaseTable также предоставили бы это свойство, поскольку они расширяют JTable, но я не могу понять, как получить дескриптор для них.

Я заметил, что для интерфейса CellEditor требуется метод isCellEditable (), который предположительно возвращает true, если ячейка может быть отредактирована, и, таким образом, редактирование начинается. Но опять же, это реализуется SheetCellEditor, который не является публичным классом, и я не знаю, как получить ссылку на него.

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 29 мая 2010

Лучшее решение, которое я мог придумать, было следующим:

Создание редактора пользовательских свойств. Сделайте, чтобы этот редактор реализовал InplaceEditor. Вернуть StringInplaceEditor, который является текстовым полем. Присоедините слушателя фокуса к этому текстовому полю. Когда фокус находится в текстовом поле, он редактируется. В противном случае это не так.

...