Афоризм
Не знаю, кто пишет сценарий моей жизни, но у него присутствует чувство юмора.
Последние статьи

 • Активности Android
Многоэкранные Android приложения
 • Fragment dynamic
Динамическая загрузка фрагментов в Android
 • Fragment lifecycle
Жизненный цикл Fragment'ов в Android
 • Fragment example
Пример Fragment'ов в Android
 • Data Binding
Описание и пример Data Binding
 • Пример MVVM
Пример использования MVVM в Android
 • Компонент TreeTable
Описание компонента TreeTable для Swing
 • Пример TreeTable
Пример использования TreeTable
 • Хранилища Android
Внутренние и внешние хранилища данных
 • Пример SQLite
Пример использования SQLite в Android
 • WebSocket
Описание и пример реализации WebSocket
 • Визуальные компоненты
Улучшен компонент выбора даты из календаря
 • Анимация jQuery
Описание и примеры анимации элементов DOM
 • APK-файл Android
Создание apk-файла для android устройств, .dex файлы
 • платформа JaBricks
Платформа OSGi-приложения JaBricks
Поддержка проекта

Если Вам сайт понравился и помог, то будем признательны за Ваш «посильный» вклад в его поддержку и развитие
 • Yandex.Деньги
  410013796724260

 • Webmoney
  R335386147728
  Z369087728698

Урок 11. Главный фрейм

В данном уроке остановимся на особенностях разработки главного фрейма приложения на платформе JaBricks. Необходимо отметить, что в конфигурацию приложения в обязательном порядке включается бандл, выполняющий функции главного фрейма. Что представляет из себя главный фрейм?

Главный фрейм – это бандл, т.е. программный jar-модуль, выполненный по технологии OSGi. Бандл в обязательном порядке должен включать активатор, реализующий функции интерфейса BundleActivator. Основные методы активатора start и stop вызываются OSGi-фреймворком для старта и останова бандла. В приложение jabricks включен OSGi-фреймворк Felix, который может по команде стартовать главный фрейм. Эту команду Felix получает, если в файле конфигурации приложения «configuration/bundles.ini» имеется описание бандла с атрибутом @main.

Структура главного фрейма

Скачаем архив проекта templ-jframe и «развернем» его. Проект создан в среде разработки IDE Eclipse. Можно, конечно, было бы внести изменения в наименование бандла/проекта. Для этого следует переименовать директорию, внести изменения в наименование проекта (<name>) в файле «.project» и переименовать artifactId проекта в «pom.xml». На этом все приготовления проекта к использованию заканчились бы. Но мы не будем переименовать проект/бандл, как это выполнено в уроках 12 и 13, а будем вносить изменения в интерфейс существующего проекта. Импортируем проект в IDE.

На скриншоте слева представлена структура проекта templ-jframe в IDE Eclipse, предназначенного для создания главного фрейма приложения JaBricks. Экземпляры классов JFrameActivator и JFrameTempl выполняют соответственно функции активатора и фрейма JFrame. Ресурсные файлы «resources/properties/propsXX.properties» содержат внутренние локализованные описания главного фрейма. Проектный файл pom.xml включает зависимости главного фрейма и плагины сборки бандла.

Интерфейсная часть главного фрейма создает окно JFrame, в котором размещает строку «Главного меню» и/или «панель инструментов» при наличии в конфигурации соответствующих описаний (configuration/menu.xml, configuration/toolbar.xml) . То есть, интерфейсная часть главного фрейма предназначена для формирования приложения с использованием библиотеки Swing.

Примечание: окно JFrame использует макет BorderLayout; панель инструментов размещается в верхней части окна (BorderLayout.NORTH). Не занимайте без необходимости данную область фрейма, в противном случае создавайте интерфейс фрейма без использования панели инструментов, либо переносите её в другую часть фрейма.

Полное описание данного проекта представлено на странице разработки главного фрейма.

Управление бандлами

Главный фрейм приложения для формирования «Главного меню» и «панели инструментов» использует соответствующие модули. Описания структур «главного меню» и «панели инструментов», хранящиеся во внешних конфигурационных файлах («configuration/menu.xml», «configuration/toolbar.xml»), включают связи с бандлами; допускается использование в описании (конфигурации) разноверсионных бандлов. Данным модулям главный фрейм «делегирует» старт бандлов приложения. То есть, при нажатии на одну из кнопок панели инструментов, либо при выборе пункта меню, модули gui-toolbar и gui-menu стартуют соответствующий бандл.

Таким образом, главный фрейм выполняет функцию «дирижера» с использованием модулей gui-toolbar и gui-menu, стартующих бандлы. Интерфейсные бандлы приложения могут создавать диалоговые окна типа JDialog, либо панели типа JPanel. Во втором случае бандлам потребуется контейнер главного фрейма для размещения в нём интерфейсной панели. С этой целью они обращаются к главному фрейму, который организует взаимодействие с бандлами приложения.

Взаимодействие с бандлами

Бандлы, формирующие панели JPanel для размещения своего интерфейса, нуждаются в контейнере, который им предоставляет главный фрейм. Для взаимодействия с такими бандлами активатор главного фрейма организует механизм «публикации/подписки». С этой целью главный фрейм подписывается на сообщение запроса контейнера «jabricks/Container/Request», отправляемого стартующим бандлом. Получив такое сообщение главный фрейм отправляет сообщение «jabricks/Container/GUISave» ранее стартованному бандлу, занимающему место в контейнере, чтобы этот бандл при необходимости сохранил изменяемые настройки интерфейса (положения сплитеров, размеры колонок таблиц). После этого, ранее стартованный бандл оcтанавливается и его панель удаляется из контейнера главного фрейма, а вновь стартованный бандл получает от главного фрейма по подписке сообщение «jabricks/Container/Request», включающего контейнер для размещения своей интерфейсной панели.

Создание главного фрейма

Ниже представлен листинг класса JBFrame. В предыдущих уроках был использован главный фрейм templ-jframe версии 1.0.0. Версия бандла в проекте определяется в pom.xml. В данном уроке следует использовать версию 1.0.1. В этом случае в методе создания интерфейса createJFrame(menuListener, toolbarListener) будет вызываться процедура createGUI, которая создаст заданный интерфейс. Описание остальных файлов, включая проектный файл pom.xml, где определяется версия бандла, Вы можете увидеть на странице разработки главного фрейма.

Листинг
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.getBundleResources(
                                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);
    }
}

Интерфейс главного фрейма после старта представлен на следующем скриншоте.

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

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

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

Для выполнения данного задания Вам необходимо только скачать необходимые бандлы, ресурсные файлы, файл описания панели инструментов и файл описания инсталлируемых бандлов. Перечисленные файлы собраны и упакованы в один архивный файл configuration.lesson11.zip (329 Кб).

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

Скачать проект главного фрейма Вы можете на странице описания templ-jframe.

  Рейтинг@Mail.ru