16
February
2006

Standard Widget Toolkit (SWT Eclipse GUI)

Posted in: Java GUI, Swing, AWT, SWT, Java technologies, J2SE |

Познакомился еще с одной Java-библиотекой для создания GUI. Это Standard Widget Toolkit (SWT). Приложения 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 вам знакомы.
Listener реализуется практически так же, как и в Swing.
Для создания MessageBox используется одноименный класс. Метод open возвращает численное значение нажатой пользователем кнопки (org.eclipse.swt.SWT содержит все необходимые константы).
SWT порадовал меня удобным Layout для отображения виджетов - FormLayout. С помощью него можно указать расположение объектов в процентном соотно?ении относительно главного окна (прямо как div в HTML). Такого LayoutManager’a очень не хватает в Swing (в Swing есть GridBagLayout, но он достаточно сложный в использовании).
Ну вот наверное и все. Если у вас есть какие-то вопросы, буду рад дать на них ответ.

7 Comments »

RSS feed for comments on this post. TrackBack URI



klim
February 16, 2006 #

А в SWT plugin входит визуальный дизайнер? ? вообще существует такой?

February 16, 2006 #

Можете посмотреть информацию об Eclipse Visual Editor (www.ibm.com/developerworks/library/os-ecvisual/).
Он поддерживает AWT/Swing/SWT.

sunrider
March 15, 2006 #

Можно где-нибудь найти полное описание классов SWT на русском или английском?
Спасибо

March 15, 2006 #

Луч?е этого и быть ничего не может: API.

Siarhei Berdachuk
May 8, 2007 #

Кое что про SWT и Eclipse на русском есть на моем сайте по адресу
(http://www.berdaflex.com/ru/eclipse/eclipse.html)

—————
Сергей Бердачук

celatus
November 28, 2008 #

А если eclipse использовать в связке с WindowBuilder, вообще ?икарно выходит…

Сергей
September 3, 2010 #

Я пробую открыть SWT диалог выбора файла из swing приложения. Но при этом программа зависает. НЕ подскажете, как можно совместить эти две библиотеки и таки открыть диалог?

Leave a comment

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong> <pre>