Тимур Машнин – Графические интерфейсы пользователя Java (страница 10)
Который заполняется отфильтрованными данными исходного изображения, с помощью метода filter созданного объекта RescaleOp.
JavaBeans и POJO
Откроем среду IntelliJ IDEA с созданным проектом Java приложения.
Нажмем правой кнопкой мыши на пакете приложения, и в меню выберем New – GUI Form.
Введем имя формы.
В результате будет создан Java класс и связанное с ним XML описание, которое открывается в редакторе IntelliJ IDEA GUI Designer.
Редактор IntelliJ IDEA GUI Designer позволяет создавать графические пользовательские интерфейсы (GUI) приложения, используя компоненты библиотеки Swing.
Этот инструмент помогает создавать диалоговые окна и группы элементов управления, которые будут использоваться в контейнере верхнего уровня, таком как JFrame.
Когда вы создаете форму с помощью GUI Designer, вы создаете панель, а не фрейм.
Пользуясь палитрой компонентов редактора, вы можете перетаскивать компоненты в форму и редактировать их свойства.
Для того чтобы компонент графического интерфейса пользователя можно было применять в таком визуальном средстве разработки, он должен обладать дополнительными качествами.
У него должен быть ярлык, помещаемый в палитру компонентов.
Среди полей компонента должны быть выделены свойства (properties), которые будут показаны в окне свойств.
У него должны быть определены методы доступа getXxx () /setXxx () /isXxx () к каждому свойству.
Этими методами будет пользоваться IDE среда разработки, чтобы определить свойства компонента.
Компонент, имеющий эти и другие определенные свойства, в технологии Java называется компонентом JavaBean.
В него может входить один или несколько классов.
Как правило, файлы этих классов упаковываются в один jar-файл и отмечаются в его файле MANIFEST. MF как Java-Bean: True.
Все компоненты AWT и Swing являются компонентами JavaBeans.
Спецификация Sun Microsystems определяет JavaBeans как повторно используемые программные компоненты, которыми можно управлять, используя графические конструкторы и средства IDE.
Визуальные средства разработки – это не основное применение JavaBeans.
Главное достоинство компонентов, оформленных как JavaBeans, в том, что они без труда встраиваются в любое приложение.
И приложение можно собрать из готовых JavaBeans как из строительных блоков, остается только настроить их свойства.
Это называется компонентное программирование.
Чтобы класс мог работать как bean, он должен соответствовать определённым соглашениям об именах методов, конструкторе и поведении.
Эти соглашения дают возможность создания инструментов, которые могут использовать, замещать и соединять JavaBeans.
Эти соглашения следующие:
Класс должен иметь конструктор без параметров, с модификатором доступа public.
Такой конструктор позволяет инструментам создать объект без дополнительных сложностей с параметрами.
Свойства класса должны быть доступны через get, set и другие методы (так называемые методы доступа), которые должны подчиняться стандартному соглашению об именах.
Это легко позволяет инструментам автоматически определять и обновлять содержание bean’ов.
Многие инструменты даже имеют специализированные редакторы для различных типов свойств.
Класс должен быть сериализуем.
Это даёт возможность надёжно сохранять, хранить и восстанавливать состояние bean независимым от платформы и виртуальной машины способом.
Класс должен иметь переопределенные методы equals, hashCode и toString.
В среде разработки NetBeans можно легко создать компонент JavaBeans с помощью меню New проекта приложения.
Для создания компонентов JavaBeans Java SE API включает в себя пакет java.beans.
В частности, помимо обычных свойств, представленных отдельными значениями и массивами значений, компонент JavaBeans может иметь связанные свойства, которые уведомляют слушателей, когда изменяется их значение.
Класс компонента JavaBeans содержит методы addPropertyChangeListener и removePropertyChangeListener для управления слушателями, и когда связанное свойство изменяется, компонент отправляет событие PropertyChangeEvent своим зарегистрированным слушателям.
Также класс компонента JavaBeans может запускать любой тип события, включая пользовательские события.
Как и в случае со свойствами, события идентифицируются по определенной схеме имен методов, add <Event> Listener и remove <Event> Listener.
Другое понятие, с которым вы можете столкнуться – это Plain Old Java Object.
Plain Old Java Object – это объект Java, который не расширяет или не реализует специализированные классы и интерфейсы каких-либо фреймворков.
POJO это просто класс Java, который содержит только поля, без логики их обработки и обеспечивает доступ ко все полям только через методы get/set.
Компоненты JavaBeans дополняют Plain Old Java Object наличием конструктора по умолчанию и наличием слушателей listener изменения свойств.
То есть Plain Old Java Object описывает структуру данных для дальнейшего использования в приложении.
Сериализация
Все мы знаем о том, что Java позволяет создавать в памяти объекты для многократного использования.
Однако все эти объекты существуют лишь до тех пор, пока выполняется создавшая их виртуальная машина.
Было бы неплохо, если бы создаваемые нами объекты могли бы существовать и вне пределов жизненного цикла виртуальной машины?
Как уже было сказано, JavaBeans обладает свойством сохранения, когда его свойства, поля и информация о состоянии могут сохраняться и извлекаться из хранилища.
Механизм, который делает возможным такое сохранение, называется сериализацией.
Сериализация объектов означает преобразование объекта в поток данных и запись его в хранилище, при этом объект представлен как последовательность байтов, которая включает в себя данные объекта, а также информацию о типе объекта и типах данных, хранящихся в объекте.
Любое приложение, которое использует такой компонент, может затем «восстановить» его путем десериализации.
Затем объект возвращается в исходное состояние.
Например, приложение Java может сериализовать окно Frame на машине Windows, сериализованный файл можно отправить с помощью электронной почты на машину Solaris, а затем приложение Java сможет восстановить окно Frame в точное состояние, существующее на машине Windows.
Чтобы так сохраняться, компоненты должны поддерживать сериализацию, реализуя либо интерфейс java.io.Serializable, либо интерфейс java.io.Externalizable.
При сериализации объекта в файл, по соглашению создается файл с расширением. ser.
Классы ObjectInputStream и ObjectOutputStream представляют собой потоки, которые содержат методы сериализации и десериализации объекта.
Это два класса, с помощью которых собственно осуществляют сериализацию и десериализацию объекта.
Если какой-либо класс в иерархии наследования класса реализует интерфейс Serializable или Externalizable, тогда этот класс и его подклассы сериализуются.
Примеры сериализуемых классов включают в себя классы Component, String, Date, Vector и Hashtable.
Известные классы, которые не поддерживающие сериализацию, включают в себя классы Image, Thread, Socket и InputStream.
Попытка сериализации объектов этих типов приведет к исключению NotSerializableException.
Java Object Serialization API автоматически сериализует большинство полей объекта Serializable в поток байтов.