Афоризм
— Вы что, считаете меня идиотом?
— Нет, но я ведь могу ошибаться.
Последние статьи

 • Советы программистам
Валидация даты, конкатенация строк
 • Домашние финансы
Приложение учета домашних финансов
 • Сохранение значений
Сохранение и восстановление значений компонентов
 • 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

Базовый фрейм JFrame

Базовый фрейм base-jframe, выполненный по технологии OSGi, позволяет формировать графический интерфейс главного фрейма приложения JaBricks в виде объекта типа JFrame библиотеки Swing и осуществлять диспетчеризацию управления другими программными модулями приложения. Основные функциональные свойства базового фрейма JaBricks обеспечивают :

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

Стиль представления

Параметры интерфейса фрейма, определяющие стиль представления компонентов и выделения в них записей, можно настроить без перекомпиляции платформы. Настройки стилей фрейма хранятся в файле configuration/style.txt в формате «ключ=значение». Данный файл создается автоматически с записями используемых стилей по умолчанию.

Меню и панель инструментов

Интерфейс приложения может включать как главное меню, так и панель инструментов. Структуру меню и панели инструментов определяет разработчик в конфигурации приложения. При выборе пунктов меню и/или нажатии на кнопках панели инструментов стартуют связанные с ними бандлы приложения. Таким образом, главный фрейм организует запуск бандлов приложения.

Локализация интерфейса

При старте приложения базовый фрейм получает от модуля ресурсов объект локализации Locale, в соответствии с которым определяются наименования пунктов меню и подсказки кнопок панели инструментов. Кроме этого, базовый фрейм может быть подписан на событие изменения языка локализации в режиме run-time. При получении сообщения об изменении языка локализации заголовок фрейма, пункты главного меню и подсказки кнопок панели инструментов локализуются согласно значению новой Locale.

Логирование сообщений

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

Контейнер фрейма

Графические бандлы приложения могут создавать интерфейс двух типов : в виде отдельного всплывающего диалогового окна типа JDialog и в виде панели типа JPanel, встраиваемую в контейнер фрейма приложения JFrame. Поскольку бандлы могут общаться друг с другом только с помощью сообщений, то взаимодействие бандлов с базовым фреймом осуществляется посредством механизма публикации/подписки. Базовый фрейм подписывается на запрос контейнера, а бандлы, использующие базовый фрейм для формирования своей интерфейсной составляющей, отправляют запросы на получение контейнера фрейма. При поступлении такого сообщения фрейм отправляет соответствующему бандлу контейнер, в котором бандл размещает свой графический интерфейс; предыдущую интерфейсную панель базовый фрейм удаляет из контейнера, а связанный с панелью бандл останавливает.

Завершение работы приложения

При завершении работы активатор останавливае все подписчики, после этого останавливает фреймворк. Завершение работы (остановку) стартованных бандлов выполняет останавливающийся фреймворк Felix.

Примечание : базовый фрейм не может самостоятельно выполнять функции главного фрейма приложения JaBricks. Он только включает необходимые классы, методы и сервисы, которые используются его наследником для создания функционирующего главного модуля приложения Jabricks. Базовый фрейм следует использовать в качестве родителя, наследник которого создает главный фрейм приложения.

Структура базового фрейма

На следующем скриншоте представлена структура базового фрейма в виде проекта в IDE Eclipse.

В состав базового фрейма входят :

Базовые модули
JBFrameActivatorкласс активатора базового фрейма
JBFrame класс интерфейсного фрейма JFrame
Модули публикации и подписки
ConnectSubscriber класс подписки на сообщения подключения к серверу БД или отключения от сервера БД
ContainerSubscriberкласс подписки на сообщение запроса контейнера JFrame
EventPublisher класс публикации сообщениий главного фрейма
LocaleSubscriber класс подписки на сообщение изменения языка локализации приложения Locale
StartTimeSubscriberкласс подписки на запрос времени старта программы

Класс активатора базового фрейма, JBFrameActivator

Класс JBFrameActivator приложения реализует интерфейсы активатора бандла BundleActivator и слушателя сервисов ServiceListener. Основная функция активатора связана с организацией взаимодействия фрейма и бандлов приложения JaBricks с использованием механизма «публикация-подписка». В режиме подписки активатор получает запросы контейнера фрейма и времени старта приложения, на которые необходимо ответить, а также сообщения об изменениях языка локализации и состояния подключения к серверу БД. В режиме публикации активатор по запросам (по подписке) отправляет бандлам сообщения «времени старта» приложения и «контейнер» фрейма для размещения панелей интерфейса.

Класс активатора включает переменные и методы. Ниже в табличном виде представлены переменные и методы с модификаторами public и protected, которые будут доступны в наследниках класса.

Переменные активатора базового фрейма

В следующей таблице представлены переменные активатора базового фрейма. Сервис logService позволяет логировать сообщения. Сервисы фрейма (service_locale, service_connect, service_container, service_starttime) используются для «подписки» на определенные сообщения. Слушатели событий (menuListener, toolbarListener, windowListener) реагируют на связанные с ними события. Все переменные доступны в наследниках. Инициализация сервисов и слушателей выполняется методами, представленными ниже.

МодификаторТип переменной НаименованиеОписание
protectedBundleContextcontext Контекст бандла, позволяет получить информацию о всем модулях приложения согласно спецификации OSGi
protectedJFrameframe Фрейм приложения
protectedlongstart_time Время старта приложения
protectedLogServicelogService Сервис логирования сообщений
protectedServiceRegistration<?>service_locale Сервис локализации
protectedServiceRegistration<?>service_connect Сервис подписки на подключение к серверу БД (или отключения)
protectedServiceRegistration<?>service_container Сервис подписки на запрос контейнера фрейма (JFrame.getContentPane)
protectedServiceRegistration<?>service_starttime Сервис подписки на запрос времени старта приложеня
protectedActionListenermenuListener Слушатель событий вызова меню
protectedActionListenertoolbarListener Слушатель событий нажатия кнопки панели инструментов
protectedWindowListenerwindowListener Слушатель событий окна

Методы активатора базового фрейма

В таблице представлены методы, определенные интерфейсами BundleActivator, ServiceListener и реализующие платформу Jabricks. Эти методы будут доступны в наследниках класса.

МодификаторМетодОписание
Методы интерфейса BundleActivator
publicvoid start(BundleContext context) throws Exception Метод вызывается фреймворком OSGi при старте бандла
public void stop(BundleContext context) throws Exception Метод вызывается фреймворком OSGi при останове бандла
Метод интерфейса ServiceListener
publicvoid serviceChanged(ServiceEvent event) Метод вызывается фреймворком OSGi при регистрации/разрегистрации сервиса
Методы платформы Jabricks
publicBundleContext getBundleContext() Метод получения бандла базовго фрейма
publicvoid logMessage(int level, String message) Метод логирования сообщений
protectedvoid createMenuListener() Метод создания слушателя меню
protectedvoid createToolbarListener() Метод создания слушателя панели инструментов
protectedvoid createWindowListener() Метод создания слушателя окна фрейма
protectedvoid createConnectSubscriber() Метод создания подписчика на событие подключения к серверу и отключения от сервера БД
protectedvoid createLocaleSubscriber() Метод создания подписчика на событие смены языка локализации
protectedvoid createJFrameSubscriber() Метод создания подписчика на запрос контейнера фрейма
publicvoid sendContainerEvent(final String symbolicName,
final String version,
final String component)
Метод отправки сообщения с контейнером фрейма бандлу с соответствующими значениями symbolicName и version
publicvoid sendStartTimeEvent() Метод отправки сообщения с временем старта приложения
publicvoid changeLocale(Locale locale) Метод изменения локализованных надписей интерфейса согласно текущей Local
publicvoid changeConnect() Метод отработки события подключения или отключения от сервера БД
protectedvoid closeConnectionSQL() Метод закрытия соедининия с сервером БД
protected void saveJFrameData() Метод сохранения данных фрейма
protectedvoid stop() Метод остановки бандла

Примечание :
1. Активатор базового фрейма JBFrameActivator включает закрытые методы подключения с сервису логирования фреймворка и завершения его работы. Эти методы вызывается автоматически при старте бандла и при закрытии окна фрейма JFrame. Открытый метод logMessage обеспечивает логирование сообщений.
2. При старте бандла автоматически стартует подписчик (StartTimeSubscriber) на сообщение запроса «времени старта» приложения. При поступлении данного запроса вызывается метод активатора sendStartTimeEvent(). При останове бандла данный сервис подписки также будет остановлен.
3. Завершить работу фрейма можно либо по нажатию на одной из кнопок панели инструментов или выбора пункта меню, либо нажатии на кнопку закрытия окна (правый верхний угол). Слушатели соответствующих событий вызывают метод stop, который завершает работу всех подписчиков, отключается от сервиса логирования и останавливает фреймворк.
4. Вызываемый при останове бандла метод saveJFrameData можно использовать для сохранения данных главного фрейма во внешнем файле, чтобы при очередном старте их можно было бы восстановить.

Листинг базового активатора фрейма, JBFrameActivator

Для реализации функций подписки и публикации активатор использует константные значения интерфейса IWidgetsConstants библиотеки gui-widgets. В листинге активатора для наглядности представления приведены переменные и методы (без кода).

Листинг
public class JBFrameActivator implements BundleActivator, 
                                         ServiceListener, 
                                         IWidgetsConstants
{
    protected  JBFrame                 frame     ;
    protected  BundleContext           context   ;
    protected  long                    start_time;

    protected  LogService              logService;

    protected  ServiceRegistration<?>  service_starttime;
    protected  ServiceRegistration<?>  service_locale   ;
    protected  ServiceRegistration<?>  service_connect  ;
    protected  ServiceRegistration<?>  service_container;
    protected  ActionListener          menuListener     ;
    protected  ActionListener          toolbarListener  ;
    protected  WindowListener          windowListener   ;
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /**
     * Методы активатора
     */
    @Override
    public void start(BundleContext cxt) throws Exception {
        . . .  
    }
    public void stop (BundleContext cxt) throws Exception {
        . . .  
    }

    /**
     * Метод регистрации/разрегистрации сервиса
     */
    @Override
    public void serviceChanged(ServiceEvent event) {
        . . .  
    }
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /**
     * Методы Jabricks
     */

    public BundleContext getBundleContext() {
        return context; 
    }

    public void logMessage(final int level, 
                           final String message){
        . . .  
    }
    /**
     * Слушатели событий
     */
    protected void createMenuListener   () {
        . . .  
    }
    protected void createToolbarListener() {
        . . .  
    }
    protected void createWindowListener () {
        . . .  
    }

    /**
     * Подписчики на сообщения
     */
    protected void createConnectSubscriber() {
        . . .  
    }
    protected void createLocaleSubscriber    () {
        . . .  
    }
    protected void createJFrameSubscriber    () {
        . . .  
    }

    /**
     * Методы обработки сообщений подписчиков
     */
    public void changeConnect() {
        . . .  
    }
    public void changeLocale(Locale locale) {
        . . .  
    }

    public void sendContainerEvent(String symbolicName,
                                   final String version, 
                                   final String component) {
        . . .  
    }
    public void sendStartTimeEvent() {
        . . .
    }
    /**
     * Методы, вызываемые при завершении работы бандла
     */
    protected void closeConnectionSQL(){
        . . .  
    }

    protected void saveJFrameData() {}

    protected void stop() {
        . . .  
    }
}

Для сохранения данных бандла во внешнем файле необходимо переопределить метод saveJFrameData(), в котором вызывать одноименный метод интерфейсного класса JBFrame.

Класс базового фрейма JBFrame

В таблице представлены доступные методы интерфейсного класса базового фрейма JBFrame :

МодификаторМетодОписание
public void createJFrame()метод создания фрейма JFrame
public void createJFrame (ActionListener mListener, ActionListener tListener)метод создания фрейма JFrame
public void saveJFrameData()Метод сохранения данных фрейма
public void createMenu (ActionListener mListener)Метод создания главного меню
public void createToolbar(ActionListener tListener)Методы создания панели инструментов
public MenuService getMenuService()Метод получения объекта главного меню
public ToolbarService getToolbarService()Метод получения объекта панели инструментов
public void changeConnect (Properties props)Методы обработки события подключения к серверу БД
public void changeLocale (Locale locale)Методы обработки событий изм енения языка локализации
public void formCentering(int width, int height)Центрирование фрейма
protected void writeDocument(Document document, String path)Метод сохранения данных фрейма в формате XML
protected Document readJFrameData()Метод чтения данных фрейма

Для сохранения данных активатор должен вызвать метод saveJFrameData, в котором выполняется упаковка данных в объект типа Document, после чего вызывается метод writeDocument для сохранения созданного документа (doc) в файл (path). Переопределив метод writeDocument Вы можете внести изменения в содержимое doc и сохранить собственные данные, которые при следующем старте бандла можно будет восстановить. Для этого следует использовать метод readJFrameData().

Примечание : метод readJFrameData восстанавливает размеры окна фрейма и возвращает результат типа Document (XML).

Классы подписки и публикации

Классы пакета com.bundle.basejframe.pubsub, представленные в скриншоте проекта, используются методами фреймворка для реализации механизма подписки и публикации.

ConnectSubscriber Класс используется методом createConnectSubscriber для создания подписки на сообщения подключения к серверу БД и отключения от сервера БД. При поступлении данного типа сообщения будет вызван метод активатора базового фрейма changeConnect.

Примечание : базовый фрейм Jabricks не работает с сервером БД, т.е. не выполняет запросы и транзакции, но может включать пункты меню и кнопки панели инструментов открытия форм (старт бандлов) подключения (отключения) к серверам БД. При необходимости в методе changeConnect можно изменить соответствующие надписи меню или подсказки кнопок панелей инструментов, либо блокировать/открыть к ним доступ.
LocaleSubscriber Класс используется методом createLocaleSubscriber для создания подписки на сообщения изменения локализации интерфейса базового фрейма. В базовом фрейме локализуются заголовок, пункты меню и подсказки панели инструментов. При поступлении сообщения с новой Locale будет вызван метод активатора базового фрейма changeLocale.
ContainerSubscriber Класс используется методом createJFrameSubscriber для создания подписки на запрос контейнера фрейма. При поступлении от бандла сообщения данного типа вызывается метод активатора sendContainerEvent(), отправляющий контейнер бандлу.
StartTimeSubscriber Класс подписки на сообщение с запросом «времени старта» программы. При поступлении от бандла сообщения «jabricks/StartTime/Request» вызывается метод активатора sendContainerEvent(), отправляющий ответ «jabricks/StartTime/Response» с включением в него значения start_time. Подписчик StartTimeSubscriber стартует автоматически при старте бандла.
EventPublisher Класс отправки главным фреймом сообщений содержит 2 метода. Метод sendContainerEvent включает в отправляемое сообщение «jabricks/Container/Response» вместе с контейнером SymbolicName и Version бандла, запросившего контейнер. Метод sendStartTimeEvent отправляет сообщение «jabricks/StartTime/Response» вместе со временем старта программы.

Взаимодействие ContainerSubscriber и EventPublisher

Представленные в таблице экземпляры классов используются для взаимодействия с интерфейсными бандлами. Экземпляр класс ContainerSubscriber участвует в подписке на сообщения, отправляемые бандлами с запросом контейнера фрейма, для размещения своего интерфейсного компонента (например, JPanel). Получив такое сообщение, ContainerSubscriber вызывает метод активатора sendContainerEvent. В данном методе активатор останавливает деактивируемый бандл, удаляет из контейнера фрейма его интерфейсный компонент, регистрирует параметры нового бандла для размещения в контейнере фрейма и отправляет ему сообщение sendContainerEvent (класс EventPublisher) с контейнером.

Пример создания главного фрейма

Как было отмечено выше, базовый модуль base-jframe.jar следует использовать для создания главного фрейма приложения JaBricks. Пример создания главного фрейма приложения JaBricks представлен здесь.

Зависимости

Базовый фрейм base-jframe функционирует вместе со следующими бандлами приложения Jabricks :

gui-widgets используются глобальные константы приложения (интерфейс IWidgetsConstants)
util-resources используется для получения внешних ресурсов
gui-menu используется для формирования главного меню приложения
gui-toolbar используется для формирования панели инструментов

Подключение модуля к приложению

Для подключения модуля base-jframe в приложение Jabricks необходимо :

  • разместить модуль в поддиректории «configuration/bundles/»
  • внести в файл инициализации бандлов «configuration/bundles.ini» запись : base-jframe-1.0.0.jar

GAV параметры модуля base-jframe имеют следующие значения :

• groupId : org.jabricks.jframe
• artifactId : base-jframe
• version : 1.0.0

Подробнее о включении модуля в приложение Jabricks представлено здесь.

Скачать base-jframe

Рассмотренный на странице базовый модуль создания главного фрейма base-jframe упакован в архивный файл base-jframe-1.0.0.zip (26.1 Кб).

  Рейтинг@Mail.ru