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Класс JBFrameActivator приложения реализует интерфейсы активатора бандла BundleActivator и слушателя сервисов ServiceListener. Основная функция активатора связана с организацией взаимодействия фрейма и бандлов приложения JaBricks с использованием механизма «публикация-подписка». В режиме подписки активатор получает запросы контейнера фрейма и времени старта приложения, на которые необходимо ответить, а также сообщения об изменениях языка локализации и состояния подключения к серверу БД. В режиме публикации активатор по запросам (по подписке) отправляет бандлам сообщения «времени старта» приложения и «контейнер» фрейма для размещения панелей интерфейса. Класс активатора включает переменные и методы. Ниже в табличном виде представлены переменные и методы с модификаторами public и protected, которые будут доступны в наследниках класса. Переменные активатора базового фреймаВ следующей таблице представлены переменные активатора базового фрейма. Сервис logService позволяет логировать сообщения. Сервисы фрейма (service_locale, service_connect, service_container, service_starttime) используются для «подписки» на определенные сообщения. Слушатели событий (menuListener, toolbarListener, windowListener) реагируют на связанные с ними события. Все переменные доступны в наследниках. Инициализация сервисов и слушателей выполняется методами, представленными ниже.
Методы активатора базового фреймаВ таблице представлены методы, определенные интерфейсами BundleActivator, ServiceListener и реализующие платформу Jabricks. Эти методы будут доступны в наследниках класса.
Примечание : Листинг базового активатора фрейма, 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 :
Для сохранения данных активатор должен вызвать метод saveJFrameData, в котором выполняется упаковка данных в объект типа Document, после чего вызывается метод writeDocument для сохранения созданного документа (doc) в файл (path). Переопределив метод writeDocument Вы можете внести изменения в содержимое doc и сохранить собственные данные, которые при следующем старте бандла можно будет восстановить. Для этого следует использовать метод readJFrameData(). Примечание : метод readJFrameData восстанавливает размеры окна фрейма и возвращает результат типа Document (XML). Классы подписки и публикацииКлассы пакета com.bundle.basejframe.pubsub, представленные в скриншоте проекта, используются методами фреймворка для реализации механизма подписки и публикации.
Взаимодействие ContainerSubscriber и EventPublisherПредставленные в таблице экземпляры классов используются для взаимодействия с интерфейсными бандлами. Экземпляр класс ContainerSubscriber участвует в подписке на сообщения, отправляемые бандлами с запросом контейнера фрейма, для размещения своего интерфейсного компонента (например, JPanel). Получив такое сообщение, ContainerSubscriber вызывает метод активатора sendContainerEvent. В данном методе активатор останавливает деактивируемый бандл, удаляет из контейнера фрейма его интерфейсный компонент, регистрирует параметры нового бандла для размещения в контейнере фрейма и отправляет ему сообщение sendContainerEvent (класс EventPublisher) с контейнером. Пример создания главного фреймаКак было отмечено выше, базовый модуль base-jframe.jar следует использовать для создания главного фрейма приложения JaBricks. Пример создания главного фрейма приложения JaBricks представлен здесь. ЗависимостиБазовый фрейм base-jframe функционирует вместе со следующими бандлами приложения Jabricks :
Версии бандлаВерсия 1.0.1 (base-jframe-1.0.1.jar) #font font.name=Arial font.size=12 Версия 1.0.2 (base-jframe-1.0.2.jar) Чтобы использовать функцию динамической загрузки бандла необходимо использовать версию приложения jabricks-1.0.1.jar, либо jabricks.exe версии 1.0.1.3. Скачать base-jframeРассмотренный на странице базовый модуль создания главного фрейма base-jframe упакован в архивный файл base-jframe-1.0.2.zip (31.1 Кб). Подключение модуля к приложениюДля подключения модуля base-jframe в приложение Jabricks необходимо :
GAV параметры модуля base-jframe имеют следующие значения :
Подробнее о включении модуля в приложение Jabricks представлено здесь. |