Javenue logo

Javenue

Программирование на Java

Информационные технологии

Standard Widget Toolkit - Обзор Eclipse SWT

Недавно познакомился еще с одной Java-библиотекой для создания GUI. Это Eclipse SWT - Standard Widget Toolkit.

Приложения SWT разрабатываются с использованием Eclipse workbench.

SWT приложения используют ОС-зависимый код (native), поэтому они быстрее Java GUI написанных на AWT и тем более на Swing.

Для написания и запуска самого простого SWT приложения на платформе Windows вам понадобится:

  • JRE (я использовал 1.4.2);
  • Eclipse SDK (3.1.0);
  • SWT plug-in (org.eclipse.swt.win32.win32.x86_3.1.0.jar).

Plug-in можно найти в директории Eclipse/plugins. Этот jar содержит dll, которая должна находится в path. Можно добавить путь к dll в Path System Variable или же просто переписать ее в папку WINDOWS/system32/. Сам же jar-файл должен находиться в classpath для данного приложения.

Привожу простейший пример Java GUI на SWT:

import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.*;

public class SWTHello { 
	Display display = new Display(); 
	Shell shell = new Shell(display); 
	Label label = null;
	Button button = null;
	
	public SWTHello() {
		shell.setLayout(new RowLayout(SWT.VERTICAL));
		label = new Label(shell, SWT.NONE); 
		label.setText("Say Hello."); 
		button = new Button(shell, SWT.NONE);
		button.setText("Say");
		button.addSelectionListener(new SimpleListener());
		shell.pack(); 
		label.pack(); 
		button.pack();
	}
	
	class SimpleListener implements SelectionListener {
		public void widgetSelected(SelectionEvent e) {
			MessageBox message = new MessageBox(shell, 
				SWT.ICON_WARNING | SWT.OK);
			message.setText("Message Box");
			message.setMessage("Hello!");
			message.open();
		}
		public void widgetDefaultSelected(SelectionEvent e) {}
	}
	
	public void start() {
		shell.open(); 
		while(!shell.isDisposed()) 
			if(!display.readAndDispatch()) 
				display.sleep(); 
		display.dispose(); 
		label.dispose();
	}
	
	public static void main(String[] args) {
		SWTHello simpleGUI = new SWTHello();
		simpleGUI.start();
	} 
}

Display - это объект, который сам по себе не виден, но нужен для того, чтобы отображать виджеты расположенные на нем.

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

Думаю, объекты Label и Button вам знакомы - это соответственно метка и кнопка. Для отображения необходимого текста нужно использовать метод setText.

Слушатели событий (listener) - реализуются практически так же, как и в Java Swing. Необходимо реализовать интерфейс SelectionListener с методами widgetSelected и widgetDefaultSelected. В реализации методов доступен класс SelectionEvent, который предоставляет всю необходимую информацию о событии, включая ссылку на объект, с которым событие произошло.

Для создания MessageBox используется одноименный класс. Метод open возвращает численное значение нажатой пользователем кнопки (org.eclipse.swt.SWT содержит все необходимые константы).

SWT порадовал меня удобным Layout для отображения виджетов - FormLayout. С помощью него можно указать расположение объектов в процентном соотношении относительно главного окна (прямо как div в HTML). Такого LayoutManager'a очень не хватает в Swing (в Swing есть GridBagLayout, но он достаточно сложный в использовании).

Обратите внимание на метод pack(). Он используется для того, чтобы установить размеры компонента в значение по-умолчанию. Как альтернатива вызову метода, можно явно проставить размеры для Layout.

Ну вот наверное и все. Если у вас есть какие-то вопросы, буду рад дать на них ответ.


Комментариев: 0

  Выйти

  * для публикации комментариев нужно