» Форма входа

»Мoy-weB ver.4.1

» Статистика

Главная » 2008 » Август » 11 » GUI в Java c помощью JFace: Создание окна приложения

GUI в Java c помощью JFace: Создание окна приложения
11.Авг.2008 | 12:03:38

GUI в Java c помощью JFace: Создание окна приложения

J
Face - это доплнительный слой абстракции над графической библиотекой SWT,
предоставляющий возможности для разработки графического интерфейса
приложения на основе модели MVC(Model View Controller). Основные
компоненты JFace включают:

  • Viewers - классы для инкапсуляции задач предоставления данных для отображения, их фильтрации, сортировки и т.п.
  • Actions
    and contributions - вводят семантику описания пользовательских действий
    и того, как они должны быть доступны пользователю.
  • Image and font registries - предоставляют классы для управления ресурсами, такими как изображения и шрифты.
  • Dialogs and wizards - фреймворк для построения сложного диалогового взаимодействия с пользователем.
  • Field
    assist - предоставляет возможности для реализации вспомогательной
    функциональности для полей, такой как отображение статуса поля или
    подсказки о содержимом.
В первой части будет рассмотрено
создание простого окна с использованием JFace, добавление к нему меню,
статусной строки и панели инструментов.


Настройка проекта

Для
того, чтобы разрабатывать графические приложения с использованием JFace
в Eclipse, необходимо подключить jar-файлы SWT и JFace.
  • В
    случае, если в Eclipse установлено PDE, то это можно сделать, указав в
    настройках проекта использовать библиотеку SWT, и поставить галочку для
    поддержки JFace.
  • Если же PDE не установлен, то необходимо
    подключить jar-файлы к проекту вручную. Найти их можно в директории
    plugins эклипса, называются они org.eclipse.swt_*.jar и
    org.eclipse.jface_*.jar

Создание окна

Окно приложения
в JFace наследуется от класса ApplicationWindow, предоставляющего
возможности для создания меню, панелей управления и строки статуса.

Простейший вариант создания окна приведен в следующем примере:

import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.widgets.Display;

public class
MainWindow extends ApplicationWindow {

public static
void main(String[] args) {
MainWindow window = new MainWindow(); // Создаем наше окно
window.setBlockOnOpen( true ); // Устанавливаем флаг - ждать закрытия окна
window.open(); // Открываем окно

Display.getCurrent().dispose(); // Освобождаем ресурсы
}

public
MainWindow() {
super( null ); // Вызываем конструктор родительского класса
}

}



Создание содержимого окна

Для
того, чтобы создать какое-то содержимое окна, необходимо переопределить
метод Control createContents( Composite parent ) класса
ApplicationWindow. Метод должен возвращать компонент, который будет
являться содержимым окна.

В этом же методе можно установить и заголовок окна, вызвав метод setText( String text ) шелла, доступного по вызову getShell()

В
этом примере таким компонентом будет просто метка белого цвета, в
реальных приложениях таким компонентом является какой-нибудь композит.

Собственно, пример:

protected Control createContents( Composite parent ) {
   
getShell().setText("My window"); // Устанавливаем заголовок окна
   
Label lbl = new Label( parent, SWT.NONE ); // Создаем новый элемент, в нашем случае - просто метку
   
lbl.setText( "Window contents" ); // Устанавливаем ей текст
   
lbl.setBackground( new Color( Display.getCurrent(), 255, 255, 255 ) ); // Устанавливаем белый цвет фона
   
return lbl;
}



Добавление статусной строки

Добавление
к окну приложения статусной строки реализуется не просто, а очень
просто. Для этого надо всего-навсего вызвать защищенный метод
addStatusBar(). Наверное, наиболее подходящим местом для такого вызова
является конструктор окна, или какой-нибудь метод его инициализации.

Для
того, чтобы отобразить текст в статусной строке необходимо вызвать
метод setStatus( String status ), аргументом которого и является та
самая строка, которую необходимо отобразить.

Создание меню

Для создания строки меню в JFace необходимо, вызвать метод addMenuBar(), как и для создания строки статуса.
Но затем необходимо добавить пункты меню на панель. Осуществляется это следующим образом:
  • Раздел
    меню описывается классом MenuManager. В конструкторе ему может быть
    передана строка - имя раздела, где символ "&" означает, что
    следующий за ним символ будет ключом при навигации с помошью клавиши
    Alt. Добавляется раздел меню на панель с помощью конструкции
    getMenuBar().add( menu ).
  • Пункт меню описывается классом
    Action. Сам класс является абстрактным, пункт меню должен быть
    унаследован от него и переопределять метод void run(), в котором
    размещается код, выполняемый при выборе пункта меню пользователем. На
    самом деле, метод можно и не переопределять, но тогда, зачем этот пункт
    меню нужен?=) Имя пункта может быть задано путем передачи в
    конструктор, или вызовом метода void setText( String text ). После
    создания пункт меню добавляется в раздел вызовом метода add у объекта
    раздела меню. Например: menu.add( menuItem )
  • Подменю создаются очень просто: Необходимо в один раздел меню методом add добавить другой раздел. Вот и все.
В
следующем примере мы создаем раздел меню File и один пункт Hello в нем,
выбор которого вызывает появление текста в статусной строке окна. Код
создания меню я оформил в один метод, который вызывается из
конструктора окна:

private void createMenu() {
addMenuBar(); // Добавляем панель меню

MenuManager fileMenu = new MenuManager( "&File" ); // Создаем новое меню
getMenuBarManager().add( fileMenu ); // Добавляем меню на панель
fileMenu.add( new Separator() ); // Добавляем разделитель в меню
fileMenu.add( new Action( "&Hello" ) { // Создаем новое действие, указываем его текст

   
@Override
   
public void run() { // Код выполняемый при активации действия
       
setStatus("Hello world!!"); // Мы просто отображаем новое значение в статусной строке
   
}

} );
// И добавляем действие в качестве пункта меню
}


Создание панели инструментов

Для
того, чтобы создать панель инструментов в окне необходимо в
конструкторе окна вызвать метод addToolBar( int style ), в который
передать стиль компонента панели.

Для доступа к созданной панели
используется метод getToolBarManager(). Для добавления действия на
панель используется метод add панели, куда передается действие.

В простейшем случае создание панели и добавление на нее кнопки будет выглядеть:

private void createToolBar() {
   
addToolBar( SWT.NONE );
   
getToolBarManager().add( new Action( "&Hello" ) { // Создаем новое действие, указываем его текст

       
@Override
       
public void run() { // Код выполняемый при активации действия
            
setStatus("Hello world!!"); // Мы просто отображаем новое значение в статусной строке
       
}

    } );
}



Создание нескольких перемещаемых панелей инструментов

Вместо одной панели инструментов можно создать набор перемещаемых панелей (CoolBar). Для этого необходимо:
  1. Вместо метода addToolBar вызвать метод addCoolBar
  2. Для доступа к набору панелей используется метод getCoolBarManager()
  3. Создать
    панель инструментов, на которую можно будет добавлять действия. Для
    этого необходимо создать новый экземпляр класса ToolBarManager, который
    будет представлять панель и вызвать метод add у CoolBarManager, передав
    туда панель.
  4. На созданную панель можно добавлять действия
Пример кода, создающего две плавающие панели:

private void createCoolbar() {
   
addCoolBar( SWT.NONE );

   
ToolBarManager tm = new ToolBarManager();
   
getCoolBarManager().add( tm );
   
tm.add( helloAction );

   
ToolBarManager tm2 = new ToolBarManager();
   
getCoolBarManager().add( tm2 );
   
tm2.add( helloAction );
   
tm2.add( helloAction );
}



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

Возможные проблемы

Здесь будут описаны некоторые проблемы, с которыми можно столкнуться:
  • При добавлении пунктов меню после запуска приложения они не появляются - чтобы изменения меню после создания окна отобразились на нем, необходимо вызвать метод getMenuBarManager().update( true ) - указать обновить панель меню.

Ссылки

Дополнительная информация по JFace может быть найдена по следующим ссылкам:
Категория: Статьй и уроки | Просмотров: 817 | Добавил: CorsaR
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]