Афоризм
Да, невесёлым получился некролог.
Наталья Резник
Последние статьи

 • Домашние финансы
Приложение учета домашних финансов
 • Сохранение значений
Сохранение и восстановление значений компонентов
 • APK-файл Android
Создание apk-файла для android устройств, .dex файлы
 • Android и OSGi
Старт OSGi-фреймворка Felix в android устройстве
 • Загрузка драйвера
Динамическая загрузка JDBC-драйвера
 • платформа JaBricks
Платформа OSGi-приложения JaBricks
 • уроки JaBricks
Учебные примеры изучения платформы Jabricks
 • бандл 'О программе'
Модуль представления инфо о программе
 • бандл form-currencies
Модуль управления справочником валют
 • бандлы JaBricks
Бандлы приложения JaBricks
Поддержка проекта

Если Вам сайт понравился и помог, то будем признательны за Ваш «посильный» вклад в его поддержку и развитие
 • Yandex.Деньги
  410013796724260

 • Webmoney
  R335386147728
  Z369087728698

Базовый модуль 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 Кб).

  Рейтинг@Mail.ru