Привязка данных SWT / Jface: PojoProperties против PojoObservable
Я пишу диалог JFace, и я хотел бы использовать привязку к объекту модели.
Глядя на код, я вижу, что бывают случаи, когда я PojoProperties
используется для создания привязки, в то время как в другой PojoObservables
,
Глядя на Javadoc, я могу прочитать:
PojoObservables: фабрика для создания наблюдаемых объектов для POJO (простых старых java-объектов), которые соответствуют идее объекта с геттерами и сеттерами, но не предоставляют события изменения свойств при изменении.
PojoProperties: фабрика для создания свойств для POJO (простых старых объектов Java), которые соответствуют идее объекта с геттерами и сеттерами, но не предоставляют события изменения свойств при изменении.
Тот же вопрос относится к разнице, которая существует между BeansObservables и BeansProperties
(Очевидное) различие заключается в том, что наблюдаемое позволяет наблюдать объекты, а свойства позволяют наблюдать свойства, но поскольку у Pojo есть геттер и сеттер для своих данных, в чем разница между ними? И какую из них мне выбрать для моего диалога?
Вот выдержка из кода:
POJO:
public class DataObject {
private String m_value;
public String getValue() {
return m_value;
}
public void setValue(String i_value) {
m_value = i_value;
}
}
ДИАЛОГ (соответствующая часть):
@Override
protected Control createDialogArea(Composite parent) {
Composite container = (Composite) super.createDialogArea(parent);
m_combo = new Combo(container, SWT.BORDER);
m_comboViewer = new ComboViewer(container, SWT.NONE);
}
СВЯЗЬ (соответствующая часть):
// using PojoObservable
IObservableValue observeValue = PojoObservables.observeValue(m_dataObject, "value");
IObservableValue observeWidget = SWTObservables.observeSelection(m_combo);
// using PojoProperties
IObservableValue observeValue = PojoProperties.value("value").observe(m_dataObject);
IObservableValue observeWidget = ViewerProperties.singleSelection().observe(m_comboViewer);
Я понимаю, что один раз я использую комбо, а другой я использую ComboViewer
, но я могу получить комбо от зрителя и связать другой способ, если мне нужно...
Кроме того, могу ли я смешать два, например, использовать observeValue
с ViewerProperties
?
IObservableValue observeValue = PojoObservables.observeValue(m_dataObject, "value");
IObservableValue observeWidget = ViewerProperties.singleSelection().observe(m_comboViewer);
2 ответа
Я немного поигрался со зрителями JFace (особенно ComboViewer) и привязкой к данным и обнаружил, что если я использую
SWTObservables.observeSelection(comboViewer.getCombo());
тогда привязка данных не работает правильно.
Однако, если я использую
ViewersObservables.observeSingleSelection(comboViewer);
Тогда все работает как положено.
Возможно, это особый случай для моего случая, поэтому для лучшего обзора я опишу его в следующем параграфе.
я имею modelObject
с именем поля selectedEntity
а также entities
и связать это ComboViewer
к modelObject
,
- Я хочу отобразить все "сущности" в объекте модели, если я добавлю какую-либо сущность в
modelObject.entities
Коллекция, то я хочу, чтобы этот объект был добавлен в комбо автоматически. - Если пользователь выбирает какой-то элемент в комбо, я хочу
modelObject.selectedEntity
быть установлен автоматически. - Если я установлю
modelObject.selectedEntity
Я хочу, чтобы комбинированный выбор был установлен автоматически.
Исходный код можно найти по адресу: https://gist.github.com/3938502
Начиная с Eclipse Mars, PojoObservables устарела в пользу PojoProperties, а BeansObservables устарела в пользу BeanProperties, поэтому ответ на этот вопрос теперь стал очевидным.