JavaBeans

  • Компонентная модель языка Java
  • Основные понятия
    • Bean
    • Свойство (property)
    • Событие (event)
    • Сохраняемость (persistance)
  • Примеры
    • Компонента GUI
    • Модель GUI

Свойство

  • Свойство
    • xxx
  • Getter
    • getXxx() или isXxx()
  • Setter
    • setXxx(value)

Типы свойств

  • Простое
    • simple
  • Связанное
    • bound
  • Индексируемое
    • indexed
  • Ограниченное
    • constrained

События

JavaBean-класс

  • Имеет конструктор по умолчанию
  • Содержит одно или несколько свойств

Пример. Простое свойство

  • Свойство title
  • Поле
    private String title;
    
  • Getter
    public String getTitle() {
        return title;
    }
    
  • Setter
    public void setTitle(String title) {
        this.title = title;
    }
    

Реализация связанных свойств

Пример. Связанное свойство

  • Property change support
    private final PropertyChangeSupport pcs = 
        new PropertyChangeSupport(this);
    
  • Setter
    public void setTitle(String title) {
        String oldValue = this.title;
        this.title = title;
        pcs.firePropertyChange("title", 
            oldValue, this.title);
    }
    

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

Ограниченные свойства

  • Процесс установки значения
    • Сохранение старого значения свойства
    • Извещение о предстоящем изменении
    • Установка нового значения
    • Извещение об установке нового значения

Отклонение изменения свойства

Пример. Ограниченное свойство

  • Vetoable change support
    private final VetoableChangeSupport vcs = 
        new VetoableChangeSupport(this);
    
  • Setter
    public void setTitle(String title) throws
            PropertyVetoException {
        String oldValue = this.title;
        vcs.fireVetoableChange("title", oldValue, title);
        this.title = title;
        pcs.firePropertyChange("title", oldValue, title);
    }
    

События

  • Методы манипуляции со слушателями
    • add<EventListener>(<EventListener> listener)
    • remove<EventListener>(<EventListener> listener)
  • При изменении списка слушателей события не генерируются

Применение JavaBean

Содержание

Пассивная GUI-компонента (1)

  • Отображает информацию из модели, не позволяя ее редактировать
  • При обновлении модели должна перерисовываться
  • Примеры
    • Индикатор прогресса
    • Список событий

Пассивная GUI-компонента (1)

Активная GUI-компонента (1)

  • Отображает информацию из модели, и позволяет ее редактировать
    • При обновлении модели должна перерисовываться
    • При изменении информации обновляет модель
  • Примеры
    • Полоса прокрутки
    • Выбор из списка
    • Текстовое поле

Активная GUI-компонента (2)

Обрыв цепочки сообщений

Приемы обработки

  • Хранение данных только в модели
    • Все данные хранятся в модели
    • При изменении данных модель отслеживает зависимости
    • Независимые редакторы свойств
  • Каскадирование изменений
    • При изменении модели изменяется и другая модель
  • Явное обновление пассивной компоненты
    • Слушатель модели обновляет компоненту

Хранение JavaBeans

Содержание

Краткосрочное хранение

  • Сериализация
  • По умолчанию, списки слушателей не сериализуются

Долговременное хранение

  • XMLEncoder – сохранение состояния
  • XMLDecoder – загрузка состояния
  • Процесс сохранения
    • Создание объекта конструктором по умолчанию
    • Сравнение всех свойств
    • При неравенстве – запись свойства
    • При равенстве – ничего

Пример. XMLEncoder

  • Сохранение состояния
    JButton button = new JButton("Hello");
    button.setAlignmentX(1);
    XMLEncoder encoder = new XMLEncoder(
        new BufferedOutputStream(
        new FileOutputStream("button.xml")));
    encoder.writeObject(button);
    encoder.close();
    

Пример. XMLEncoder

  • Результат
    <?xml version="1.0" encoding="UTF-8"?>
    <java version="1.8.0_40" 
            class="java.beans.XMLDecoder">
        <object class="javax.swing.JButton">
            <string>Hello</string>
            <void property="alignmentX">
                <float>1.0</float>
            </void>
        </object>
    </java>
    

Пример. XMLDecoder

  • Загрузка состояния
    XMLDecoder decoder = new XMLDecoder(
        new BufferedInputStream(
        new FileInputStream("button.xml")));
    JButton button = (JButton) decoder.readObject();
    decoder.close();
    

Формат XML-файла

  • <java> – основной контейнер
  • <object class="…"> – объект
  • <void method="…"> – вызов метода
  • <void property="…"> – установка свойства
  • <int>, <string>, … – значения
  • <array> – массив

Самоописание

Содержание

Самоописание (introspection)

  • Способ описания свойств JavaBean
  • Преимущества
    • Переносимость
    • Повторное использование
    • Совместимость

Описание JavaBean

Дескриптор возможности

Дескриптор свойства

Дескриптор группы событий

Дескриптор метода

Получение информации о JavaBean

GUI-редакторы

  • Позволяют
    • Редактировать свойства JavaBean
    • Добавлять связи по событиям
    • Добавлять обработчики событий

Заключение

Содержание

JavaBean

  • Класс с конструктором по умолчанию
  • Содержит свойства
  • Позволяет добавлять слушателей
  • Serializable

Ссылки

Вопросы