Привязка JGoodies, фиксация фокуса не потеряна и фиксация для каждого набранного символа - PullRequest
0 голосов
/ 14 февраля 2012

В API привязок JGoodies ( Ссылка на API ) есть параметр commitOnFocusLost:

commitOnFocusLost - true для фиксации изменений текста при потере фокуса, false зафиксировать изменения текста для каждого набранного символа

Я хочу, чтобы поведение, в котором нет фиксации при потере фокуса и не было фиксации во время набора символов. Я только хочу, чтобы был коммит, когда я вызываю Bindings.commitImmediatly (). Могу ли я это сделать?

Ответы [ 2 ]

0 голосов
/ 07 декабря 2012

Вы, наверное, ищете BufferedValueModel:

ValueModel, которая оборачивает другую ValueModel, тему и задерживает изменения значения темы. Возвращает значение субъекта, пока значение не будет установлено. Буферизованное значение не записывается субъекту, пока канал триггера не изменится на Boolean.TRUE.

PresentationModel.getBufferedValue() полезно для их создания.


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

Карстен Ленцш при буферизации :

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

В любом случае, если вы хотите создать буфер на уровне Presentation Model (PM), Вы должны сделать это доступным в личке. Логика вашей презентации затем работает в состоянии буферизации, а не в состоянии домена.

Вы можете найти пример в руководстве по связыванию. Увидеть BufferedAlbumPresentationModel. Это демонстрирует, как слушать изменения в буферизованном «классическом» свойстве обновить буферизованное свойство "composerEnabled". Обратите внимание, что BufferedClassicalChangeHandler копирует поведение реализовано в альбоме # setClassical, который устанавливает композитор к нулю, если альбом не классический.

Учебное пособие можно найти в старых пакетах в архиве загрузок JGoodies .

0 голосов
/ 11 мая 2012

Я не уверен на 100%, но да, вы можете сделать это.

Вам необходимо использовать BasicComponentFactory для создания вашего компонента и использовать BasicComponentFactory.createTextField (ValueModel) без параметра bool.

Затем вам нужно будет выяснить, как и когда вызывать сейф для вашей модели стоимости, чтобы сохранить его соответствующим образом.

...