Афоризм
Ох и помотало же тебя по чужим кроватям!
Лариса Гузеева
Последние статьи

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

Урок 3. Главное меню

Структура приложения JaBricks для третьего урока, представленная на следующем сриншоте, практически повторяет второй урок и включает :

  • набор бандлов в поддиректории конфигурации «configuration/bundles»;
  • изображения иконки приложения и подпунктов меню (поддиректория «configuration/resources/images»);
  • ресурсные файлы, используемые в надписях меню (поддиректория «configuration/resources/properties)»;
  • файл со списком инсталлируемых бандлов «configuration/bundles.ini»;
  • файл описания структуры главного меню «configuration/menu.xml»;
  • файл инициализации jabricks.ini и приложение jabricks.jar;
  • файл старта приложения из командной строки run.bat (для Windows).

Для построения главного меню используется бандл gui-menu. Формат описания меню позволяет разделить строку главного меню на две части и размещать пункты меню как с левой стороны, так и с правой стороны. Кроме этого, меню может иметь многоуровневый иерархический вид; рекомендуется ограничиваться двумя уровнями. Подпункты меню могут иметь изображения.

В структуре описания главного меню к подпунктам меню можно «привязать» бандлы, которые приложение будет стартовать при их выборе мышью. Можно также обработать выбор подпункта меню мышью внутри фрейма.

В описании структуры главного меню можно включить бандлы разных версий, т.е. имеющих одинаковое наименование (SymbolicName), но отличающиеся номером версий. Таким образом, JaBricks позволяет подключать в главное меню и стартовать бандлы разных версий.

Бандл gui-menu-1.0.0.jar должен всегда присутствовать в конфигурации, поскольку в базовом фрейме base-jframe установлена с ним связь. Файл описания главного меню «configuration/menu.xml» может отсутствовать; в этом случае меню в главном фрейме приложения будет отсутствовать.

Листинг файла bundles.ini

Листинг файла с описанием инсталлируемых бандлов имеет такой же вид, как и во втором уроке :


bundles=org.apache.felix.eventadmin-1.4.8.jar@start, \
org.apache.felix.log-1.0.1.jar@start, \
util-resources-1.0.0.jar@start, \
util-logger-1.0.0.jar@start, \
base-jframe-1.0.0.jar, \
base-jpanel-1.0.0.jar, \
base-jdialog-1.0.0.jar, \
gui-menu-1.0.0.jar, \
gui-toolbar-1.0.0.jar, \
gui-widgets-1.0.0.jar, \
templ-jdialog-1.0.0.jar, \
templ-jpanel-1.0.0.jar, \
templ-jframe-1.0.0.jar@main
 

Описание формата и назначение артибутов представлено в первом уроке. С описаниями бандлов templ-jdialog и templ-jpanel мы будет знакомиться в разделе программирования.

Листинг menu.xml

Листинг файла описания структуры меню «configuration/menu.xml» имеет следующий вид :

<?xml version="1.0" encoding="UTF-8"?>
<menubar name="mainMenu">
    <menu name="menu.file">
        <menuitem name="menu.jpanel" image="database.png"
                  groupId="org.jabricks.templates" 
                  artifactId="templ-jpanel"
                  version="1.0.0" />
        <menuitem name="separator" />
        <menuitem name="menu.exit" accelerator="alt X" 
                  image="door-open.png" />
    </menu>
    <stub />
    <menu name="menu.help" >
        <menuitem name="menu.jdialog" image="info.png"
                  groupId="org.jabricks.templates" 
                  artifactId="templ-jdialog"
                  version="1.0.0" />
    </menu>
</menubar>

С форматом описания структуры главного меню можно познакомиться здесь. В примере главное меню разделено на 2 части тегом <stub>. В левой части главного меню размещается один пункт меню <menu> с двумя подпунктами <menuitem>, разделенных сепаратором (separator). В правой части – один пункт меню с одним подпунктом. Описание пункта меню <menu> и подпункта меню <menuitem> включают интуитивно-понятные атрибуты :

  • name – наименование пункта/подпункта меню, используется в локализации текстовой надписи;
  • image – отображаемое в подпункте меню изображение, расположенное в директории «configuration/resources/images»;
  • groupId, artifactId, version – связанный с подпунктом меню бандл.
  • guimode – режим представления интерфейсной части бандла, созданного с использованием базового модуля base-universal; может принимать одно из значений "jdialog" и "jpanel".

Старт приложения

После старта приложения и выбора мышью пунктов меню «Панель» и «Диалог» Вы должны увидеть следующий интерфейс :

Протоколируемые сообщения

Если Вы знакомились с протоколом сообщений после второго урока, то данный пункт Вы можете пропустить.

При запуске приложения из командной строки (командный файл run.bat) в консоль выводятся следующие сообщения об инициализации и старте соответствующих бандлов. Первоначально фреймворк инсталлирует бандлы, описанные в файле configuration/bundles.ini и присутствующие в поддиректории configuration/bundles (состояние INSTALLED). После этого, бандлы с атрибутом @start и @main стартуются фреймворком; бандлы, связанные со стартованными, переводятся фреймворком в состояние RESOLVED. После этого с небольшими временными интервалами мышью выбираются пункты меню, вызывая старт связанных с ними бандлов. Подсвеченные комментарии поясняют процесс старта и останова фреймворка и бандлов.


java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)
16:49:29,463  START ~~~~~ Framework CREATED ~~~~~
16:49:29,956  INFO  Framework init
16:49:29,959  INFO  Framework start
12:08:13,959  INFO  Install bundles
16:49:29,986  OSGi  gui-widgets : INSTALLED
16:49:30,800  OSGi  base-jdialog : INSTALLED
16:49:30,197  OSGi  base-jframe : INSTALLED
16:49:30,320  OSGi  base-jpanel : INSTALLED
16:49:30,422  OSGi  gui-menu : INSTALLED
16:49:30,515  OSGi  gui-toolbar : INSTALLED
16:49:30,534  OSGi  org.apache.felix.eventadmin : INSTALLED
16:49:30,663  OSGi  org.apache.felix.log : INSTALLED
16:49:30,846  OSGi  templ-jdialog : INSTALLED
16:49:30,859  OSGi  templ-jframe : INSTALLED
16:49:30,878  OSGi  templ-jpanel : INSTALLED
16:49:30,978  OSGi  util-logger : INSTALLED
16:49:31,570  OSGi  util-resources : INSTALLED

// старт бандлов и фреймворка
16:49:31,149  OSGi  util-logger : STARTED
16:49:31,168  OSGi  base-jframe : RESOLVED
16:49:31,168  OSGi  templ-jframe : RESOLVED
16:49:31,168  OSGi  gui-widgets : RESOLVED
16:49:31,168  OSGi  gui-menu : RESOLVED
16:49:31,168  OSGi  gui-toolbar : RESOLVED

// регистрация фреймворком сервисов
16:49:31,178  OSGi  ServiceEvent REGISTERED : \
                        'jabricks/LocaleEvent'
16:49:31,179  OSGi  ServiceEvent REGISTERED : \
                        'jabricks/Container/Request'
16:49:31,737  OSGi  templ-jframe : STARTED

// старт бандла templ-jpanel
16:49:43,161  OSGi  base-jpanel : RESOLVED
16:49:43,162  OSGi  templ-jpanel : RESOLVED

// старт бандлом сервисов (подписка на сообщения)
16:49:43,167  OSGi  ServiceEvent REGISTERED : \
                        'jabricks/LocaleEvent'
16:49:43,169  OSGi  ServiceEvent REGISTERED : \
                        'jabricks/Container/GUISaver'
16:49:43,171  OSGi  ServiceEvent REGISTERED : \
                        'jabricks/Container/Response'
// отправка сообщения с запросом контейнерв фрейма
16:49:43,175  OSGi  templ-jpanel : \
                        send 'jabricks/Container/Request'
// фреймворк получает запрос на контейнер
16:49:43,176  OSGi  templ-jframe get event on topic : \
                        jabricks/Container/Request
16:49:43,177  INFO  ... from bundle templ-jpanel;1.0.0
// фреймворк отвечает на запрос отправкой бандлу контейнера
16:49:43,179  OSGi  templ-jframe : \
                        send 'jabricks/Container/Response'
16:49:43,195  OSGi  templ-jpanel get event on topic : \
                        jabricks/Container/Response
16:49:43,195  OSGi  templ-jpanel : STARTED

// старт бандла org.jabricks.templates.templ-jdialog
16:50:00,678  OSGi  base-jdialog : RESOLVED
16:50:00,679  OSGi  templ-jdialog : RESOLVED
16:50:01,370  OSGi  ServiceEvent REGISTERED : \
                        'jabricks/LocaleEvent'
16:50:01,370  OSGi  templ-jdialog : STARTED

// останов бандла org.jabricks.templates.templ-jdialog
16:50:12,458  OSGi  ServiceEvent UNREGISTERING : \
                        'jabricks/LocaleEvent'
16:50:12,459  OSGi  templ-jdialog : STOPPED

// останов приложения (фреймворка)
16:50:18,682  OSGi  ServiceEvent UNREGISTERING : \
                        'jabricks/LocaleEvent'
16:50:18,682  OSGi  ServiceEvent UNREGISTERING : \
                        'jabricks/Container/Request'
 

Примечание : в представленных выше сообщениях отображены только наименования (artifactId) бандла. Реально Вы увидите символическое наименование (SymbolicName) бандла, включающее groupId и artifactId. Символ переноса '\' делит строку на две части.

Описание бандлов для ознакомления

В данном уроке Вам желательно познакомиться с описаниями следующих бандлов, используемых в приложении :

  • gui-menu – модуль формирования строки главного меню фрейма;
  • util-logger – модуль логирования сообщений;
  • base-jdialog – базовый модуль формирования JDialog;
  • base-jpanel – базовый модуль формирования панели для размещения в контейнере фрейма;
  • templ-jpanel – шаблон встраиваемой в контейнер фрейма интерфейсной панели.

Связанные страницы

Список уроков
Предыдующий, 2-й урок
Следующий, 4-й урок

Скачивание файлов

Поскольку после первого урока структура приложения уже сформирована, то сейчас необходимо скачать только бандлы, ресурсные файлы, файл описания главного меню и файл описания инсталлируемых бандлов. Перечисленные файлы собраны и упакованы в один архивный файл configuration.lesson03.zip (380 Кб).

Скачайте и «разверните» архив configuration.lesson3.zip, перенесите файлы в структуру, представленную на верхнем скриншоте.

  Рейтинг@Mail.ru