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 Кб). |
