Отчетность индексироваться собственности изменений в бобах

В J2SE 5.0, ряд функций были добавлены. Одна из них была поддержка IndexedPropertyChangeEvent. Компонент JavaBeans API обеспечила возможность сообщать об изменениях в регулярных свойств компонента JavaBeans (также называемого JavaBean или просто "боб"). Поддержка IndexedPropertyChangeEvent Добавлена возможность сообщить дополнительную информацию об изменениях в индексированных свойств компонентов.

Большинство людей знакомы с JavaBean свойствам компонентов. Просто добавьте установить и получить методы вашего класса и у вас есть для чтения и записи имущества определяется независимо от названия это после установки и получите. Иными словами, если ваш класс имеет методы именем SETNAME () и GetName (), в вашем классе JavaBean имущества компонента именем имя.

Есть два типа свойств компонентов: регулярные и проиндексированы. Индексированные свойства отличаются от регулярных свойств в том, что они имеют несколько значений, где каждое значение имеет доступ к индексу. Установить и получить методы регулярной собственности, таких как имя будет выглядеть следующим образом:

Регулярный собственности:

  • public void setName(String name)
  • public String getName()

Если имя индексироваться собственности, методы, выглядят следующим образом:

Индексированные собственности:

  • public void setName(int index, String name)
  • public String getName(int index)
  • public void setName(String[] names)
  • public String[] getName()

Фасоль может быть разработана для уведомления Вас о своих изменениях собственности. Вы можете зарегистрировать объект PropertyChangeListener с фасоль через addPropertyChangeListener () метод. Слушатель затем уведомил об изменениях через PropertyChangeEvent IndexedPropertyChangeEvent объекты или объекты. Собственности, которая генерирует PropertyChangeEvent когда ее изменения величина называется связанным собственности.

Класс PropertyChangeListener имеет один метод:

public void propertyChange(PropertyChangeEvent pce)

Если аргумент PropertyChange () имеет тип PropertyChangeEvent, как вы получите уведомление с IndexedPropertyChangeEvent? Ответ вытекает из того факта, что класс IndexedPropertyChangeEvent является подклассом PropertyChangeEvent. Таким образом, внутри вашего PropertyChange () вам потребуется экземпляром проверить, какой тип аргумента вы получаете:


   public void propertyChange(PropertyChangeEvent pce) {

     String name = pce.getPropertyName();

     if (pce instanceof IndexedPropertyChangeEvent) {

       IndexedPropertyChangeEvent ipce =

         (IndexedPropertyChangeEventpce;

       int index = ipce.getIndex();

       System.out.println("Property: " + name + "; index: " 

       + index);

     else {

       System.out.println("Property: " + name);

     }

     System.out.println("; value: " + pce.getNewValue());

   }

Перед просмотром пример программы, которая использует IndexedPropertyChangeEvent, давайте сосредоточимся на том, как сообщить об изменении связанной индексироваться собственности. Следующий код докладов обновления имя индексироваться собственности показано ранее:


   private PropertyChangeSupport changeSupport;



   public ClassConstructor() {

     changeSupport = new PropertyChangeSupport(this);

   }



   public void setName(int index, String name) {

     String oldName = this.name;

     this.name = name;

     changeSupport.fireIndexedPropertyChange("name", index,

       oldName, name);

   }

PropertyChangeSupport класс поддержки класс найден в пакете java.beans (пакет для компонента JavaBeans API). FireIndexedPropertyChange () методом докладов изменения связаны индексироваться собственности (в данном случае, название), на любую слушателей, которые были зарегистрированы через addPropertyChangeListener () метод.

Вот что полный пример выглядит следующим образом:


   import java.beans.*;

   import java.util.*;

   

   public class IndexedSampleBean {

   

     private PropertyChangeSupport changeSupport;

   

     private Map<Integer, String> names;

   

     private String title;

   

     public IndexedSampleBean() {

       changeSupport = new PropertyChangeSupport(this);

       names = new HashMap<Integer, String>();

     }

   

     public void setTitle(String title) {

       String oldTitle = this.title;

       this.title = title;

       changeSupport.firePropertyChange("title", oldTitle, title);

     }

   

     public String getTitle() {

       return title;

     }

   

     public void setName(int index, String name) {

         String oldName = names.get(index);

         names.put(index, name);

         changeSupport.fireIndexedPropertyChange("name", index,

                   oldName, name);

     }

   

     public String getName(int index) {

       return names.get(index);

     }

   

     public void addPropertyChangeListener(

      PropertyChangeListener l) {

         changeSupport.addPropertyChangeListener(l);

     }



     public void removePropertyChangeListener(

      PropertyChangeListener l) {

         changeSupport.removePropertyChangeListener(l);

     }

   

     public static void main(String[] argsthrows Exception {

       IndexedSampleBean bean = new IndexedSampleBean();

       PropertyChangeListener listener = 

         new PropertyChangeListener() {

           public void propertyChange(PropertyChangeEvent pce) {

             String name = pce.getPropertyName();

             if (pce instanceof IndexedPropertyChangeEvent) {

               IndexedPropertyChangeEvent ipce =

                 (IndexedPropertyChangeEventpce;

               int index = ipce.getIndex();

               System.out.print("Property: " + name +

                 "; index: " + index);

             else {

               System.out.print("Property: " + name);

             }

             System.out.println("; value: " + pce.getNewValue());

           }

       };

       bean.addPropertyChangeListener(listener);

       bean.setName(1"John");

       bean.setName(2"Ed");

       bean.setName(3"Mary");

       bean.setName(4"Joan");

       bean.setTitle("Captain");

       System.out.println("Name at 3 is: " + bean.getName(3));

       System.out.println("Title is: " + bean.getTitle());

     }

   }

Класс определяет индексированные свойства имя и устанавливает имя на четырех позициях. Кроме того, регулярно связаны свойства названии присутствует также и множество. Слушатель уведомили для каждого вызова установить имя или название, а затем напечатать имя свойства, индекс (если необходимо), и стоимость. Затем класс получает имя на одну конкретную позицию и печатает его, перед печатью одного названия.

Запуск программы дает следующие результаты:

>java IndexedSample
Property: name index: 1 value: John
Property: name index: 2 value: Ed
Property: name index: 3 value: Mary
Property: name index: 4 value: Joan
Property: title; value: Captain
Name at 3 is: Mary
Title is: Captain

Для получения дополнительной информации о поддержке IndexedPropertyChangeEvent в компоненте JavaBeans API, см.. Также см. в Java Tutorial.

Copyright (C) 2004-2005 Sun Microsystems, Inc
Все права защищены.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>