410013796724260
• Webmoney
R335386147728
Z369087728698
Пример главного фрейма templ-jframeПроект templ-jframe представляет пример создания главного фрейма приложения Jabricks. На следующем скиншоте представлена структура проекта в среде разработки IDE Eclipse. Представленный на скриншоте проект создания главного фрейма приложения JaBricks включает :
Для создания главного фрейма приложения JaBricks необходимо выполнить сборку приложения по технологии OSGi. При описании проектного файла pom.xml следует указать зависимость (dependency) базового фрейма (base-jframe). Классы проекта templ-jframe наследуют свойства классов базового фрейма. Ниже приводятся листинги описания классов и проектного файла, которые можно использовать при создании главных фреймов приложений на платформе JaBricks. Листинг активатора JFrameActivatorАктиватор главного фрейма наследует свойства активатора базового фрейма JBFrameActivator и реализует функции активатора бандла BundleActivator. В переопределенном методе start формируются подписчики сообщений изменения языка локализации createLocaleSubscriber и запроса контейнера фрейма createJFrameSubscriber. При необходимости можно подключить подписчика сообщения установления соединения с сервером БД (createConnectSubscriber). Данные подписчики слушают поступление соответствущих сообщений от других бандлов приложения. Методы createMenuListener и createToolbarListener создают объекты Главного меню и панели инструментов для управления стартами бандлов приложения. Описания главного меню и структуры панели инструментов приложения располагается во внешних файлах. Метод createWindowListener создает слушателя фрейма, вызывающего метод останова приложения. После создания интерфейсного фрейма приложения frame к его меню и панели инструментов подключаются слушатели завершения работы приложения. Соответствующие пункт меню (MENU_exit) и кнопка панели инструментов (TOOLBAR_exit) должны быть описаны во внешних конфигурационных файлах приложения (configuration/menu.xml, configuration/toolbar.xml). Переопределенный метод saveJFrameData, вызываемый в методе stop() при остановке бандла, сохраняет размеры окна (фрейма) во внешнем файле (gui/templ-jframe-1.0.0.xml), наименование которого состоит из артифакта и версии бандла.
package com.bundle.jframe; /** * Активатор бандла создания фрейма OSGi приложения * с использованием JFrame библиотеки SWING */ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import org.osgi.framework.BundleContext; import org.osgi.framework.BundleActivator; import org.osgi.framework.ServiceListener; import org.jabricks.jframe.JBFrameActivator; public class JFrameActivator extends JBFrameActivator implements BundleActivator { private final String MENU_exit = "menu.exit" ; private final String TOOLBAR_exit = "toolbar.exit"; //----------------------------------------------------- /** * Процедура старта; вызывается фреймворком. * @param context */ @Override public void start(final BundleContext context) throws Exception { super.start (context); createLocaleSubscriber (); // createConnectSubscriber(); createJFrameSubscriber (); createMenuListener (); createToolbarListener (); createWindowListener (); frame = new JFrameTempl(context); frame.createJFrame(menuListener, toolbarListener); // Завершение работы программы при выборе // пункта меню MENU_exit MenuService ms = frame.getMenuService(); if (ms != null) { ms.addActionListener(MENU_exit, new ActionListener() { public void actionPerformed (ActionEvent action) { stop(); } }); } // Завершение работы программы при нажатии на // кнопку панели инструментов TOOLBAR_exit ToolbarService ts = frame.getToolbarService(); if (ts != null) { ts.addActionListener(TOOLBAR_exit, new ActionListener() { public void actionPerformed (ActionEvent action) { stop(); } }); } // Слушатель фрейма frame.getJFrame().addWindowListener(windowListener); } //----------------------------------------------------- public void saveJFrameData() { frame.saveJFrameData(); } } Листинг фрейма JFrameTemplКласс JFrameTempl, предназначенный для создания главного фрейма приложения, включает конструктор и два метода : createJFrame и changeLocale. Конструктор класса передает родителю контекст активатора. Метод createGUI, представленный в листинге, используется в 11 уроке в версии 1.0.1. Метод createJFrame, получающий в качестве параметров слушателей меню и панели инструментов, создает фрейм JFrame, определяет локализованный заголовок фрейма и делает его видимым. Если фрейм не должен быть развернут во весь экран монитора, то размер его можно ограничить методом setSize и разместить по центру монитора (formCentering). Метод changeLocale локализует заголовок фрейма, пункты меню и подсказки кнопок панели инструментов. Данный метод вызывается автоматически в режиме «run-time» при изменении языка локализации приложения, т.е. при получении сообщения о смене Locale.
import java.awt.event.ActionListener; import java.util.Locale; import java.util.Properties; import java.util.ResourceBundle; import org.jabricks.jframe.JBFrame; import org.osgi.framework.BundleContext; import com.bundle.resources.IResources; import com.bundle.resources.ResourcesImpl; import org.jabricks.basegui.common.IBaseGuiConstants; public class JFrameTempl extends JBFrame implements IBaseGuiConstants { //----------------------------------------------------- public JFrameTempl (final BundleContext context) { super(context); } //----------------------------------------------------- public void createJFrame(ActionListener menuListener, ActionListener toolbarListener) { super.createJFrame(menuListener, toolbarListener); String version = context.getBundle().getVersion() .toString() if (version.equalsIgnoreCase("1.0.1")) createGUI(); IResources resources = new ResourcesImpl(); Locale locale = resources.getLocale(); changeLocale(locale); jframe.repaint(); // Открытие окна jframe.setVisible(true); } //----------------------------------------------------- /** * Процедура смены языка локализации */ @Override public void changeLocale(Locale locale) { /* * Внутренние ресурсы : локализованный заголовок * фрейма приложения */ if (locale != null) { ResourceBundle rsc; rsc = ResourceBundle.getBundle (RESOURCES_props, locale); jframe.setTitle(rsc.getString(RESOURCE_title)); } /* * Внешние ресурсы : локализованные заголовки * пунктов меню и подсказки * кнопок панели инструментов */ IResources resources = new ResourcesImpl(); if (resources != null) { Properties props; props = resources.getResources( context.getBundle() .getSymbolicName()); // Определение локализационных пунктов меню if (menuService != null) menuService.changeLocale(props); // Определение локализационных подсказок if (tbService != null) tbService.changeLocale(props); } } //----------------------------------------------------- private void createGUI() { JPanel pnlTop = new JPanel(); JPanel pnlCenter = new JPanel(); JPanel pnlBottom = new JPanel(); pnlTop .setBackground(new Color(216, 216, 216)); pnlCenter.setBackground(new Color(240, 240, 240)); pnlBottom.setBackground(new Color(216, 216, 216)); jframe.add(pnlTop , BorderLayout.NORTH ); jframe.add(pnlCenter, BorderLayout.CENTER); jframe.add(pnlBottom, BorderLayout.SOUTH ); JLabel lblTop = new JLabel(" "); JLabel lblBottom = new JLabel(" "); Font font font = new Font("Courier New", Font.PLAIN, 48); lblTop .setFont(font); lblBottom.setFont(font); pnlTop .add(lblTop ); pnlBottom.add(lblBottom); } } Проектный файл pom.xmlПредставленный ниже листинг файла pom.xml позволяет выполнить сборку главного фрейма приложения JaBricks по технологии OSGi. Проектный файл определяет GAV-параметры бандла и необходимые для разработки в IDE зависимости (секция dependencies). Плагин maven-bundle-plugin регистрирует в манифесте используемые модулем пакеты (секция <Import-Package>).
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.jabricks.jframe</groupId> <artifactId>templ-jframe</artifactId> <packaging>bundle</packaging> <version>1.0.0</version> <name>JFrame template</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding> UTF-8 </project.build.sourceEncoding> <maven.test.skip>true</maven.test.skip> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.apache.felix</groupId> <artifactId> org.apache.felix.framework </artifactId> <version>5.6.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.felix</groupId> <artifactId> org.apache.felix.eventadmin </artifactId> <version>1.2.2</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.jabricks.resources</groupId> <artifactId>util-resources</artifactId> <version>1.0.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.jabricks.basegui</groupId> <artifactId>gui-widgets</artifactId> <version>1.0.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.jabricks.jframe</groupId> <artifactId>base-jframe</artifactId> <version>1.0.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.jabricks.menu</groupId> <artifactId>gui-menu</artifactId> <version>1.0.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.jabricks.toolbar</groupId> <artifactId>gui-toolbar</artifactId> <version>1.0.0</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>${maven.compiler.source}</source> <target>${maven.compiler.target}</target> </configuration> </plugin> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <version>2.3.7</version> <extensions>true</extensions> <configuration> <instructions> <Bundle-SymbolicName> ${project.groupId} .${project.artifactId} </Bundle-SymbolicName> <Bundle-Name> ${project.name} </Bundle-Name> <Bundle-Version> ${project.version} </Bundle-Version> <Bundle-Activator> ${project.groupId} .JFrameActivator </Bundle-Activator> <Import-Package> javax.swing.*, javax.xml.parsers, org.osgi.framework.*, org.jabricks.jframe.*, org.jabricks.basegui.*, org.jabricks.resources, org.jabricks.menu, org.jabricks.toolbar </Import-Package> </instructions> </configuration> </plugin> </plugins> </build> </project> ЗависимостиИнтерфейсный модуль templ-jframe функционирует вместе со следующими бандлами приложения Jabricks :
Подключение модуля к приложениюДля подключения модуля templ-jframe в приложение Jabricks необходимо :
GAV параметры модуля templ-jframe.jar имеют следующие значения :
Подробнее о включении модуля в приложение JaBbricks представлено здесь. Скачать templ-jframeРассмотренный на странице пример главного фрейма templ-jframe в виде проекта IDE Eclipse упакован в архивный файл templ-jframe.zip (22.9 Кб). |