Опубликован: 04.12.2009 | Доступ: свободный | Студентов: 8418 / 658 | Оценка: 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
Полетаев Дмитрий
Полетаев Дмитрий
Не очень понятно про оболочечные Данные,ячейки памяти могут наверно размер менять,какое это значение те же операции только ячейки больше,по скорости тоже самое
Максим Старостин
Максим Старостин

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