410013796724260
• Webmoney
R335386147728
Z369087728698
Урок 3. Главное менюСтруктура приложения JaBricks для третьего урока, представленная на следующем сриншоте, практически повторяет второй урок и включает :
Для построения главного меню используется бандл 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> включают интуитивно-понятные атрибуты :
Старт приложенияПосле старта приложения и выбора мышью пунктов меню «Панель» и «Диалог» Вы должны увидеть следующий интерфейс : Протоколируемые сообщенияЕсли Вы знакомились с протоколом сообщений после второго урока, то данный пункт Вы можете пропустить. При запуске приложения из командной строки (командный файл 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. Символ переноса '\' делит строку на две части. Описание бандлов для ознакомленияВ данном уроке Вам желательно познакомиться с описаниями следующих бандлов, используемых в приложении :
Связанные страницыСписок уроковПредыдующий, 2-й урок Следующий, 4-й урок Скачивание файловПоскольку после первого урока структура приложения уже сформирована, то сейчас необходимо скачать только бандлы, ресурсные файлы, файл описания главного меню и файл описания инсталлируемых бандлов. Перечисленные файлы собраны и упакованы в один архивный файл configuration.lesson03.zip (380 Кб). Скачайте и «разверните» архив configuration.lesson3.zip, перенесите файлы в структуру, представленную на верхнем скриншоте. |