Базовый модуль JPanel
Базовый модуль base-jpanel, выполненный по технологии
OSGi, существенно облегчает и ускоряет формирование бандла для
приложений на платформе JaBricks. Модуль base-jpanel с использованием
библиотеки Swing позволяет создавать интерфейсную панель типа
JPanel, встраиваемую в контейнер главного фрейма приложения. Пример использования base-jpanel представлен
здесь. Основные функциональные свойства модуля обеспечивают :
- формирования структуры бандла;
- чтение ресурсных файлов бандла;
- сохранение и восстановление регулируемых настроек интерфейса;
- логирование сообщений;
- подписку на сообщения подключения к серверу БД;
- подписку на сообщения локализации интерфейса.
На скриншоте представлена структура модуля в среде разработкие IDE Eclipse :
В таблице представлен список и краткое описание используемых в модуле классов.
Наименование класса |
Описание |
ComponentParams |
Класс описания регулируемых настроек интерфейса (размер, положение) |
JBPanel |
Класс формирования интерфейсной панели JPanel |
JBPanelActivator |
Активатор модуля |
Классы реализации механизма публикация/подписка |
ConnectSubscriber |
Класс подписки на сообщения подключения к серверу БД |
ContainerSubscriber |
Класс подписки на сообщения получения контейнера главного фрейма |
EventPublisher |
Класс отправки сообщения с запросом контейнера главного фрейма |
LocaleSubscriber |
Класс подписки на сообщения изменения объекта локализации |
StartTimeSubscriber |
Класс подписки на сообщения со временем старта приложения |
JBPanelActivator
Класс JBPanelActivator наследует (extends) свойства активатора BundleActivator и включает следующие
методы :
Метод |
Описание |
void start (BundleContext context) throws Exception |
Метод вызывается OSGi-фреймворком при старте бандла. В методе выполняется подключение к сервису
протоколирования. |
void stop (BundleContext context) throws Exception |
Метод вызывается OSGi-фреймворком при останове бандла. В методе останавливаются все стартованные сервисы и
вызывается метод сохранения регулируемых настроек интерфейса saveComponentParams(). |
BundleContext getBundleContext() |
Метод получения контекста бандла. |
void createLocaleSubscriber() |
Метод выполняет «подписку» (LocaleSubscriber) на сообщения смены объекта локализации приложения
«jabricks/LocaleEvent». При поступлении данного сообщения вызывается метод активатора
changeLocale. |
void changeLocale (Locale locale) |
Метод вызывается при поступлении сообщения «jabricks/LocaleEvent». В качестве параметра метод получает
текущий (новый) объект локализации. |
void createConnectSubscriber() |
Метод выполняет «подписку» (ConnectSubscriber) на сообщения подключения к серверу БД или отключения от сервера БД
«jabricks/DBConnect». При поступлении данного сообщения вызывается метод changeConnect. |
void changeConnect() |
Метод вызывается при поступлении сообщения «jabricks/DBConnect». |
void createJFrameSubscriber(JBPanelActivator) |
Метод выполняет «подписку» (ContainerSubscriber) на сообщения получения от главного фрейма приложения
контейнера интерфейса. При поступлении сообщения подписчик вызывает метод активатора
getJFrameResponseContainer(Container). |
void getJFrameResponseContainer(Container container) |
Вызываемый по «подписке» метод для создания интерфейсной панели бандла и размещение её в контейнера
(container) главного фрейма. |
void sendContainerRequestEvent() |
Метод отправки главному фрейму запроса на размещение в его контейнере интерфейсной панели
JBPanel. |
void sendContainerRequestEvent(final String component) |
Метод отправки главному фрейму запроса на размещение в его контейнере интерфейсной панели component
бандла. |
void logMessage (final int level, final String message) |
Метод отправки сообщения в сервис протоколирования. |
void saveComponentParams() |
«Пустой» метод сохранения настроек интерфейса. |
void createStartTimeResponseSubscriber (JBPanelActivator) |
Метод создания подписчика (класс StartTimeResponseSubscriber) на сообщение со временем старта
приложения. |
void getStartTimeResponseMessage (long start_time) |
Вызываемый подписчиком (StartTimeResponseSubscriber) метод со временем старта приложения. |
void sendStartTimeRequestEvent() |
Метод отправки запроса времени старта приложения. |
public long getStartTime () |
Метод определения времени старта приложения. |
Примечание :
1. В методе start создается сервис логирования сообщений logService, который используется в методе logMessage.
2. Механизм «подписки» реализуется в методах активатора. То есть, при поступлении от модулей приложения сообщений,
на которые «подписался» бандл, вызываются соответствующие методы активатора.
3. Метод сохранения настроек интерфейса saveComponentParams вызывается в методе stop при останове бандла. Если
необходимо сохранять настройки интерфейсной формы бандла метод необходимо переопределить (см. пример
templ-jpanel).
4. Механизм взаимодействия (публикация/подписка) с главным фреймом для размещения в его контейнере интерфейсной
панели бандла описан ниже, после описания классов публикации и подписки.
Время старта приложения
Значение времени старта приложения бандлу может понадобиться для восстановления измененных значений в интерфейсной
панели в течение одного сеанса функционирования приложения. Рассмотрим пример, в котором бандл создает свой интерфейс в
виде панели. Панель бандла размещается в контейнере главного фрейма. Допустим пользователь внес какие-либо изменения в
компоненты формы, и после этого открыл другую вкладку главного фрейма. Через некоторое время, пользователь возвращается
на первоначально открытую вкладку. Если ранее введенные значения не восстановить, то пользователю придется повторно
заполнять форму, остается неприятный осадок от недоработанного программного продукта. Поэтому необходимо сравнить время
сохранения измененных значений формы и время старта приложения. Если время старта приложения отстает от времени
сохранения, то, следовательно, сохраненные значения относятся к предыдущему сеансу, и восстанавливать их нет
необходимости. В противном случае необходимо заполнить форму сохраненными значениями.
Методом createStartTimeResponseSubscriber(JBPanelActivator) создается подписчик на запрос времени старта
приложения, после чего можно отправлять запрос главному фрейму методом sendStartTimeRequestEvent. При поступлении
от главного фрейма ответа подписчик вызовет метод getStartTimeResponseMessage(long), которому в качестве параметра
подписчик передаст время старта приложения в мс. Метод активатора getStartTime() позволяет получить время старта
программы в классах формирования интерфейса.
Класс JBPanel
Класс JBPanel включает поля и методы для создания интерфейса типа JPanel.
Конструктор класса
JBPanel имеет 1 конструктор, который в качестве параметра получае активатор бандла, который может быть
использован для получения контекста бандла методом getBundleContext() и для отправки сообщения в сервис
протоколирования методом logMessage :
public JBPanel (final JBPanelActivator activator);
Поля класса JBPanel
В листинге представлены доступные поля класса. Общий модификатор полей protected вынесен в отдельную строку
комментария.
// protected
JBPanelActivator activator = null;
Locale locale = null;
List<ComponentParams> cparams = null;
activator
активатор бандла.
locale
объект текущей локализации интерфейса приложения, определяемый либо конструктором класса, либо устанавливаемый методом
changeLocale (Locale).
cparams
список объектов описания изменяемых настроек объектов интерфейса, формируемый при чтении параметров интерфейса.
Методы класса JBPanel
В следующей таблице приведены public- и protected-методы класса JBPanel :
Метод | Описание |
public void createGUI(Container container) |
Метод создания интерфейсной панели и размещения её в контейнере container главного фрейма. |
public void changeLocale(Locale locale) |
Метод определения локализованных надписей. Данный метод при необходимости следует переопределить и включить
в него код обновления соответствующих надписей (меток) и текста сообщений при динамической смене в режиме
run-time языка локализации. Метод вызывается из активатора бандла (см. описание активатора). |
protected ImageIcon getImage(final String name) |
Метод чтения ресурсного файла изображения бандла. |
protected Properties loadProperties(final String resources,
final Locale locale) |
Метод чтения ресурсных свойств бандла :
– resources определяет полный путь к ресурсному файлу бандла, используемого по умолчанию,
т.е. не включающего язык локализации и расширение; например, "properties/settings"
– locale определяет текущий объект локализации. |
protected Document readDocument (String fname) |
Метод чтения XML файла с созданием объекта Document. |
protected void writeDocument(Document, String) |
Метод сохранения объекта document в файл. |
protected boolean dialogConfirm(Component parent,
final String title,
final String text,
final String yes,
final String no) |
Функция открытия диалогового окна подтверждения JOptionPane. В качестве параметров функция получает
заголовок окна, текстовое сообщение и локализованные заголовки кнопок Yes и No. Результат подтверждения
возращается в виде логического значения [true | false]. |
protected void dialogMessage(Component parent,
final int icon,
final String title,
final String text) |
Метод вывода сообщения в диалоговое окно JOptionPane. В качестве параметров метод получает изображение иконки,
заголовок окна и текстовое сообщение. |
Методы управления регулируемыми настройками параметров интерфейса
(размеры, положения) |
public void saveComponentParams() |
Метод сохранения настроек интерфейса. |
protected void readComponentParams() |
Метод чтения параметров настроек интерфейса. |
protected ComponentParams extractComponentParams(
final String className,
final String name) |
Метод чтения описания настроек объекта |
Получение текущего объекта локализации
В методе чтения ресурсных свойств бандла используется объект локализации. Ниже представлен пример получения текущего
объекта локализации с использованием утилиты управления внешними ресурсами util-resources :
IResources resources = new ResourcesImpl();
Locale locale = resources.getLocale();
Класс подписки ConnectSubscriber
Класс ConnectSubscriber предназначен для обработки сообщения соединения с сервером БД. Экземпляр этого класса
включается в механизм «подписки» на сообщения «jabricks/DBConnect». При поступлении данного типа сообщения
вызывается метод активатора changeConnect().
Класс подписки LocaleSubscriber
Класс LocaleSubscriber предназначен для обработки сообщения локализации интерфейса приложения. Экземпляр
этого класса включается в механизм «подписки» на сообщения «jabricks/LocaleEvent». При поступлении данного
типа сообщения вызывается метод активатора changeLocale(Locale) с параметром нового объекта локализации.
Класс подписки EventPublisher
EventPublisher связан с отправкой главному фрейму приложения сообщения с запросом контейнера. Экземпляр
класса создается в методах активатора sendContainerRequestEvent(), sendContainerRequestEvent(String
component) и вызывается его одноименный метод экземпляра с отправкой главному фрейму сообщения. Таким образом, класс
EventPublisher используется в механизме публикации сообщения «jabricks/Container/Request».
Класс подписки ContainerSubscriber
ContainerSubscriber связан с подпиской на сообщение «jabricks/Container/Response». Данный тип
сообщения отправляет главный фрейм, вкладывая в него свой контейнер. Экземпляр подписчика (ContainerSubscriber),
получая данное сообщение, обрабатывает его и вызывает метод активатора getJFrameResponseContainer (Container).
На заметку
Классы EventPublisher и containerSubscriber участвуют в реализации механизма «публикация/подписка» для
получения контейнера от главного фрейма приложения. Главный фрейм приложения, получив сообщение от вновь стартованного
бандла о запросе контейнера «jabricks/Container/Request», останавливает ранее стартованный бандл и его панель
удаляется из контейнера главного фрейма, а вновь стартованный бандл размещает в контейнере свою интерфейсную панель.
Класс ComponentParams
ComponentParams используется для описания изменяемых в интерфейсе параметров (размер, положение) объектов типа
JSplitPane, JTable. Ниже представлен листинг класса; методы get/set не представлены в листинге.
public class ComponentParams
{
private String clazz ;
private String name ;
private int location;
private String columns ;
public ComponentParams() {}
public ComponentParams(String clazz, String name) {
this.clazz = clazz;
this.name = name;
}
// Методы get/set
...
Пример создания интерфейсного модуля
Как было отмечено выше, базовый модуль base-jpanel следует использовать в качестве родительского для создания
интерфейсного модуля приложения JaBricks. Пример создания интерфейсного модуля представлен
здесь.
Зависимости
Базовый модуль base-jpanel функционирует вместе со следующими бандлами приложения JaBricks :
gui-widgets |
используются константы и компоненты при формировании интерфейса формы |
util-resources |
используется для получения внешних ресурсов |
Подключение модуля к приложению
Для подключения модуля base-jpanel в приложение JaBricks необходимо :
- разместить модуль в поддиректории «configuration/bundles/»
- внести в файл инициализации бандлов «configuration/bundles.ini» запись : base-jpanel-1.0.0.jar
GAV параметры модуля base-jpanel имеют следующие значения :
• groupId | : org.jabricks.jpanel |
• artifactId | : base-jpanel |
• version | : 1.0.0 |
Подробнее о включении модуля в приложение JaBbricks представлено
здесь.
Скачать base-jpanel
Рассмотренный на странице базовый модуль создания интерфейсной панели base-jpanel упакован в архивный файл
base-jpanel-1.0.0.zip (20.0 Кб).
|