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

JFace – это доплнительный слой абстракции над графической библиотекой 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 может быть найдена по следующим ссылкам:

  • Русскоязычная вводная статья на ibm.com
  • Цикл англоязычных статей на ibm.com
  • Описание API Eclipse – среди прочего там есть и пакеты, относящиеся к SWT и JFace

Поделиться в соц. сетях

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

Также рекомендуем:

  1. Sun Microsystems открыла несколько компонентов Java Компания Sun Microsystems, как и ожидалось, открыла исходные коды ряда компонентов платформы Java.. В настоящее время сторонние разработчики могут получить доступ к исходному коду ключевых компонентов Java Platform Standard Edition (Java SE), а также исходникам Java Platform Micro Edition (Java ME) для мобильных устройств. Sun, в частности, открыла код виртуальной машины Hotspot, компилятора Java C [...]...
  2. Пример создания многоязыкового приложения (XML) Введение Вопрос разработки многоязычного web – приложения (сайта) или приложения с поддержкой интерфейса пользователя на разных языках, поднимается довольно часто. Если еще пару лет назад данная задача была не так актуальна, то сейчас подобная функциональность де – факто стала одним из требований заказчика при создании web – ориентированного приложения.. Формулировка задачи Целью данной работы является [...]...
  3. Всплывающее меню для одностраничного портала Введение Недавно решил изучить ASP.NET и одновременно создать что-нибудь полезное, посложнее «Hello, world!». Первое знакомство с ASP.NET у меня началось с IBuySpy. Довольно быстро разобравшись с этим Shared Source проектом, я начал его перекраивать под свои нужды. В итоге осталось довольно мало оригинального кода, кроме части ядра (ибо, зачем изобретать велосипед? ). Кроме всего прочего, [...]...
  4. Работа с SQLite Введение SQLite – это реляционная база данных, запросы к которой можно осуществлять при помощи языка запросов SQL. База данных не поддерживает все особенности SQL и уступает в функциональности другим развитым СУБД, но вполне подходит для хранения и извлечения информации.. Отличие SQLite от MySQL и аналогичных СУБД Классические СУБД, такие как MySQL (а так же MS [...]...
  5. Сложные графики и диаграммы в ASP.NET. Часть пятая – интерактивность. Введение В предыдущей статье речь шла об использовании диаграмм ChartSpace, входящих в состав библиотеки owc11. Мы продолжим изучение этой библиотеки, но в более сложном применении. В данном случае нас интересует интерактивность (то есть обратная связь). Только представьте себе: пользователь увидел круговую диаграмму, нажал мышью по интересующему его сектору, и тут же получил на месте круговой [...]...
  6. Ruby on Rails: Making Programmers Happy David Heinemeier Hansson, the creator of the increasingly popular Ruby on Rails Web application framework, answered a few questions about his creation earlier this week for eWEEK Senior Editor Darryl K. Taft.. What’s the allure of Ruby on Rails? Why do folks love it so? The author of Ruby, Yukihiro Matsumoto, tells us that he [...]...
  7. Текст из воды Step 1Создайте документ и напишите любой текст. Растеризуйте слой.. Используя кисть, добавьте несколько капель и подтеков к тексту. Объедините оба слоя Layer > Flatten Image. Step 2Идем в палитру каналов и создаем маску канала путем перетаскивания любого слоя Red, Green или Blue на иконку New Channel внизу палитры каналов. Называем его water. Далее инвертируем канал [...]...
  8. Рекомендации по работе с копирайтерами Как же грамотно работать с копирайтером? Некоторые клиенты ошибаются в том что, выбрав копирайтера, они считают свою работу завершенной. Безусловно, правильный выбор копирайтера серьезное подспорье в будущем успехе. Однако совместная работа должна вестись непрерывно.. Ведь только тесное взаимодействие сделают конечный продукт по-настоящему сильным. Задача копирайтера изложить Ваши мысли на бумаге (или экране монитора). Многие клиенты [...]...
  9. PHP и формы Ни для кого не является секретом, что наиболее распространенным способом взаимодействия html-страницы с сайтом является форма. Форма (то есть html-элемент образуемый тегом form) используется и бесплатными почтовыми службами, электронными магазинами и многими другими типами сайтов.. Обработка простых форм посредством PHP не представляет никакого труда. Однако время от времени возникает потребность обработать форму, содержащую несколько однотипных [...]...
  10. Подсвечивание кода с помощью jQuery и Chili В этом руководстве мы научимся подсвечивать исходный код с помощью плагина Chili для jQuery. Мы узнаем, как видоизменять Chili для повышения читаемости и удобства использования подсветки в собственных функциях.. [Демо] [Исходный код] Введение В первом руководстве вы узнаете, как подсвечивать исходный код с помощью плагина jQuery Chili. И это не очередная быстрая справка по Chili: [...]...
  11. Гайд о поисковой оптимизации Быть может весь арсенал способов, которым я пользуюсь сегодня, завтра перестанет работать, но общие принципы поисковой оптимизации останутся. Поисковые системы (Яндекс, Google, Рамблер, MSN, Yahoo) также будут стараться обеспечить максимальное соответствие выдачи запросу (релеватность выдачи), а поисковые оптимизаторы продвинуть свои сайты как можно выше в этой самой выдаче. Первый раз я пришел в SEO (в [...]...
  12. Эффект линзы Эффект линзы (в оригинале – Стеклянный шар). В этом уроке вы научитесь создавать стеклянный шар-линзу. Такая линза будет особенно хорошо смотреться в сочетании с другими объектами, так как она дает довольно реалистичное искажение того, что под ней находится. Начните с рисования окружности, затем дублируйте ее 1 раз. Залейте верхнюю окружность радиальным градиентом (белый в центре, [...]...
  13. Когда заплачет налоговая Как отнесутся сегодня к человеку, который возьмется утверждать, будто банковская система вскоре либо исчезнет вовсе, либо изменится до неузнаваемости? Как минимум посмотрят как на умалишенного, как максимум, отправят в психушку. Тем не менее, сегодня уже происходят процессы, которые лет 15 назад никто бы не смог представить – банковская система, доселе контролировавшая все денежные потоки, теряет [...]...
  14. Ucoz web service. Как это было… ПРЕЛЮДИЯ Жил был один молодой парень, который даже не слышал о компьютерах и не мог понять, что это такое. Впервые ему удалось лицезреть его в 10лет. Решив удивить своих друзей и преподавателя, он радостно сказал : я знаю что ЭТО… Осциллограф! Но не было в этом моей вины, вы убедитесь в этом увидев ЭВМ «Электрон».. [...]...
  15. Базовые основы поисковой оптимизации. Практические методы продвижения сайта Поисковая оптимизация – это комплекс работ над сайтом и внешними факторами для достижения наилучших позиций в поисковых системах в соответствии с выбранными ключевыми словами. Этот способ оптимизации позволяет достигать высоких позиций в результатах выдачи поисковых машин по профильным запросам (ключевым словам) и тем самым привлекать огромную часть целевых посетителей. . В настоящий момент единственным путём [...]...

Комментарии запрещены.