Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






MyBean.addPropertyChangeListener(obj);




где myBean – создаваемый бин (имеется в виду объект, а не класс).

Пункт 4-й должен быть реализован для каждого класса-слушателя, а п.5 – для каждого порожденного объекта-слушателя.

Следует разобрать подробнее пункты 2 и 3.

Сейчас необходимо реализовать генерацию событий. Бин должен генерировать событие PropertyChangeEvent при изменении связанного свойства (п.3). Кроме того, согласно правилам событийной модели Java он должен обеспечивать регистрацию/дерегистрацию слушателей при помощи соответствующих методов add…Listener/remove…Listener (п.2).

Т.е. нужно обеспечить наличие в бине некоторого списка слушателей, а также методы addPropertyChangeListener() и removePropertyChangeListener().

К счастью, не требуется программировать все это. Соответствующий инструментарий уже подготовлен в пакете java.beans – это класс java.beans.PropertyChangeSupport. Он обеспечивает регистрацию слушателей и методы firePropertyChange(), которые можно использовать в тех местах, где требуется сгенерировать событие, т.е. в set -методах, которые изменяют значение связанных атрибутов.

Предложенный механизм будет рассмотрен в следующем примере.

Пусть имеется некоторый бин SomeBean с одним свойством someProperty:

/* пример # 24: простой bean-класс: SomeBean.java */

package chapt13;

public class SomeBean{

private String someProperty = null;

public SomeBean(){

}

public String getSomeProperty(){

return someProperty;

}

public void setSomeProperty(String value){

someProperty = value;

}

}

Переделаем его так, чтобы свойство someProperty стало связанным:

/* пример # 25: bean-класс со связанным свойством: SomeBean.java */

import java.beans.*;

public class SomeBean{

private String someProperty = null;

private PropertyChangeSupport pcs;

public SomeBean(){

pcs = new PropertyChangeSupport(this);

}

public void addPropertyChangeListener

(PropertyChangeListener pcl){

pcs.addPropertyChangeListener(pcl);

}

public void removePropertyChangeListener

(PropertyChangeListener pcl){ pcs.removePropertyChangeListener(pcl);

}

public String getSomeProperty(){

return someProperty;

}

public void setSomeProperty(String value){

pcs.firePropertyChange(“someProperty”, someProperty, value);

someProperty = value;

}

}

Здесь реализованы пункты 1, 2 и 3 приведенной инструкции. Остальные пункты относятся к использованию связанного свойства, и для их демонстрации потребуется более реальный пример.

Для обеспечения механизма генерации событий в классе SomeBean создан объект класса PropertyChangeSupport (поле pcs). И все действия по регис­трации/дерегистрации слушателей по собственно генерации событий “переадре­суются” этому объекту, который за нас выполняет всю эту рутинную работу.

Так, например, метод

addPropertyChangeListener(PropertyChangeListener pcl) созданного класса просто обращается к одноименному методу класса PropertyChangeSupport. В методе setSomeProperty() перед собственно изменением значения свойства someProperty генерируется событие PropertyChangeEvent. Для этого вызывается метод firePropertyChange(), который обеспечивает все необходимые для такой генерации действия.

Как видно из кода примера, результат не очень громоздкий, несмотря на то, что наш бин реализует достаточно сложное поведение.






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных