Опубликован: 04.12.2009 | Доступ: свободный | Студентов: 8233 / 585 | Оценка: 4.30 / 3.87 | Длительность: 27:27:00
Лекция 12:

Компонентное программирование

< Лекция 11 || Лекция 12: 1234
Аннотация: Компонентная архитектура JavaBeans. Мастер создания компонента в NetBeans. Пример создания компонента в NetBeans - панель с заголовком. Добавление в компонент новых свойств. Добавление в компонент новых событий.

12.1. Компонентная архитектура JavaBeans

Компонент – это:

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

Технология JavaBeans предоставляет возможность написания компонентного программного обеспечения на языке Java. Beans по-английски означает "зерна" – обыгрывается происхождение названия "Java" от любимого создателями языка Java сорта кофе. Компоненты JavaBeans в литературе по языку Java часто упоминаются просто как Beans.

Компонент JavaBeans может быть включен в состав более сложных (составных) компонентов, приложений, сервлетов, пакетов, модулей. Причем обычно это делается с помощью сред визуального проектирования.

Компоненты JavaBeans предоставляют свои общедоступные методы и события для режима визуального проектирования. Доступ к ним возможен в том случае, когда их названия соответствуют особым шаблонам проектирования (bean design patterns). Для задания свойства требуется, чтобы существовали геттер и сеттер для этого свойства. Пример будет приведен в следующем параграфе.

Компонент может быть установлен в среду разработки, в этом случае кнопки доступа к компонентам выносятся на палитру (palette) или панель инструментов (toolbox). Вы можете создать экземпляр компонента на проектируемой экранной форме в режиме Design ("дизайн") путем выбора его кнопки на панели и перетаскивания на форму. Затем можно изменять его свойства , писать обработчики событий, включать в состав других компонентов и т. д.

Компонент JavaBeans является классом Java и имеет три типа атрибутов:

  • Методы компонента JavaBeans не отличаются от других методов объектов в Java. Они описывают поведение компонента. Общедоступные методы компонента могут вызываться из других компонентов или из обработчиков событий.
  • Свойства (Properties) компонента JavaBeans характеризуют его внешний вид и поведение и могут быть изменены в процессе визуального проектирования. Это можно сделать с помощью редактора свойств (Property Editor), а некоторые из свойств – вручную (положение компонента, его размер, текст). Свойство задается комбинацией геттера и сеттера (метода по чтению и метода по записи).
  • События (Events) используются для связи между компонентами. При помещении компонента на экранную форму среда разработки исследует компоненты и определяет, какие программные события данный компонент может порождать (рассылать) и какие - получать (обрабатывать).

При окончании работы со средой разработки состояние компонентов сохраняется в файле с помощью механизма сериализации - представления объектов Java в виде потока байтов. При последующей загрузке проекта сохраненное состояние компонентов считывается из файла.

В NetBeans существует несколько способов создания компонента JavaBeans.

Наиболее простым является использование мастера создания компонента. О нем будет сказано в следующем параграфе.

Другой способ – создать для компонента класс BeanInfo, обеспечивающий поставку необходимой информации о компоненте. Этот класс должен реализовывать интерфейс BeanInfo, и его имя должно состоять из имени компонента и названия интерфейса. Например, для компонента MyComponent это будет MyComponentBeanInfo. Существует класс-адаптер SimpleBeanInfo для интерфейса BeanInfo. В его наследнике достаточно переписать методы, подлежащие модификации. Среда NetBeans позволяет с помощью мастера создать заготовку такого класса.

Для редактирования некоторых свойств в среде визуального проектирования требуется специальный объект – редактор свойств (Property Editor). Среда NetBeans позволяет с помощью мастера создать заготовку и для такого класса.

12.2. Мастер создания компонента в NetBeans

Рассмотрим подробнее процесс создания собственного компонента. В NetBeans для этого необходимо выбрать в меню File/New File…/JavaBeans Objects/JavaBeans Component и нажать кнопку Next>.

Создание компонента JavaBeans. Шаг 1

увеличить изображение
Рис. 12.1. Создание компонента JavaBeans. Шаг 1

Далее в поле Class Name надо ввести имя компонента. В качестве примера мы введем MyBean. Затем обязательно следует выбрать пакет, в котором мы будем создавать компонент – мы выберем пакет нашего приложения. После чего следует нажать на кнопку Finish.

Создание компонента JavaBean. Шаг 2

увеличить изображение
Рис. 12.2. Создание компонента JavaBean. Шаг 2

Приведем код получившейся заготовки:

/*
 * MyBean.java
 *
 * Created on 30 Октябрь 2006 г., 23:16
 */

package java_gui_example;

import java.beans.*;
import java.io.Serializable;

/**
 * @author В.Монахов
 */
public class MyBean extends Object implements Serializable {

    public static final String PROP_SAMPLE_PROPERTY = "sampleProperty";
    
    private String sampleProperty;
    
    private PropertyChangeSupport propertySupport;
    
    public MyBean() {
        propertySupport = new PropertyChangeSupport(this);
    }
    
    public String getSampleProperty() {
        return sampleProperty;
    }
    
    public void setSampleProperty(String value) {
        String oldValue = sampleProperty;
        sampleProperty = value;
        propertySupport.firePropertyChange(PROP_SAMPLE_PROPERTY,
                                           oldValue, sampleProperty);
    }
    
    public void addPropertyChangeListener(PropertyChangeListener listener) {
        propertySupport.addPropertyChangeListener(listener);
    }
    
    public void removePropertyChangeListener(PropertyChangeListener
                                                                 listener) {
        propertySupport.removePropertyChangeListener(listener);
    }

}

В данном компоненте создана заготовка для строкового свойства sampleProperty. Геттер public String getSampleProperty() обеспечивает чтение значения свойства, а сеттер public void setSampleProperty(String value) обеспечивает установку нового значения.

Служебный объект private PropertyChangeSupport propertySupport обеспечивает поддержку работы с обработчиком события PropertyChange. Отметим, что "property change" означает "изменение свойства". Это событие должно возникать при каждом изменении свойств нашего компонента.

Как уже говорилось, в каждом объекте, поддерживающем работу с неким событием (в нашем случае это событие PropertyChange ), имеется список объектов-слушателей событий ( listeners ). Иногда их называют зарегистрированными слушателями. Методы с названием fire ИмяСобытия ("fire" – "стрелять", в данном случае – "выстрелить событием") осуществляют поочередный вызов зарегистрированных слушателей из списка для данного события, передавая им событие на обработку. В нашем случае это метод propertySupport.firePropertyChange. Сначала он обеспечивает создание объекта-события, если значение свойства действительно изменилось, а потом поочередно вызывает слушателей этого события для его обработки.

Методы

public void addPropertyChangeListener(PropertyChangeListener listener)

и

public void removePropertyChangeListener(PropertyChangeListener listener)

обеспечивают для компонента возможность добавления и удаления объекта слушателя - обработчика события Property Change.

Если требуется создать другие свойства или обеспечить добавление и удаление обработчиков других событий, можно воспользоваться соответствующим мастером. В узле Bean Patterns ("Pattern" означает "образец" ) следует правой кнопкой мыши вызвать всплывающее меню, и выбрать Add. А затем в зависимости от того, что необходимо, выбрать один из видов свойств ( Property ) или событий ( Event ). Об этом более подробно будет говориться далее.

Таким же образом удаляются свойства и события компонента.

< Лекция 11 || Лекция 12: 1234
Максим Старостин
Максим Старостин

Код с перемещением фигур не стирает старую фигуру, а просто рисует новую в новом месте. Точку, круг.

Наталья Алмаева
Наталья Алмаева
Россия
Александр Санчиров
Александр Санчиров
Россия, Москва