SWT предоставляет множество возможностей, но для реализации надежного и полезного приложения необходимо знать ключевые элементы системы - виджеты, макеты и события.
При добавлении элементов UI с помощью расширений рабочей среды платформы механизмами запуска SWT управляет рабочая среда.
Если вы разрабатываете приложение SWT с нуля без использования рабочей среды, то вам необходимо знать структуру приложения SWT.
Структура обычного автономного приложения SWT следующая:
Следующий фрагмент кода взят из приложения org.eclipse.swt.examples.helloworld.HelloWorld2 и немного изменен. Так как приложение отображает только строку "Hello World,", регистрация событий виджетов в нем не нужна.
public static void main (String [] args) { Display display = new Display (); Shell shell = new Shell (display); Label label = new Label (shell, SWT.CENTER); label.setText ("Hello_world"); label.setBounds (shell.getClientArea ()); shell.open (); while (!shell.isDisposed ()) { if (!display.readAndDispatch ()) display.sleep (); } display.dispose (); }
Класс Display представляет собой мостик между SWT и системой GUI платформы. Обычно экраны используются для управления циклом событий платформы и контроля связи нити UI с остальными нитями. (Полное описание управления нитями UI см. в разделе Работы с нитями для клиентов.)
Этот шаблон подойдет для большинства приложений. Перед созданием какого-либо окна следует создать класс экрана, а при закрытии окна его следует освободить. Если вы не разрабатываете многопоточное приложение, то для экрана больше ничего не нужно.
Класс Shell - это "окно" управляемое администратором окон платформы. Оболочки верхнего уровня являются потомками экрана. При работе с приложением эти окна можно перемещать, изменять их размеры, свертывать и развертывать. Вторичные оболочки являются потомками других оболочек. Обычно эти окна используются как окна диалога или другие временные окна, существующие только в контексте другого окна.
У всех виджетов, не являющихся оболочками верхнего уровня, должны быть предки. У оболочек верхнего уровня предков нет, но они при создании связываются с конкретным окном (Display).К этому окну можно обратиться с помощью getDisplay(). Все остальные виджеты создаются как потомки (прямые или непрямые) оболочек верхнего уровня.
Виджеты Composite - это те виджеты, которые могут иметь потомков.
Окно приложения можно назвать деревом виджетов или иерархией, чьим корнем является оболочка. В зависимости от сложности приложения потомков может быть один или несколько, или даже многоуровневые составные виджеты с потомком.
Некоторые свойства виджета указываются при его создании и изменению уже не подлежат. Например, список может быть одиночный или с множественным выбором, с полосой прокрутки или без.
Эти свойства называются стилями и задаются в конструкторе. Все конструкторы виджетов получают аргумент int, который указывает поразрядную маску ИЛИ всех желаемых стилей. В некоторых случаях стиль считается подсказкой. Это означает, что он может поддерживаться не всеми платформами, и в тех платформах, которые его не поддерживают, будет проигнорирован.
Константы стилей находятся в классе SWT в виде общих статических полей. Список применимых констант для каждого класса виджета можно найти в справочнике по API для SWT.
При работе с SWT платформы требуют явного выделения и освобождения ресурсов ОС. Согласно принципу проектирования SWT, отражающему структуру приложения платформы в инструментарии виджета, в SWT требуется явно освобождать выделенные ресурсы ОС. В SWT для освобождения ресурсов, связанных с конкретным объектом инструментария используется метод Widget.dispose().
Практическое правило: если вы создали объект, вы должны его удалить. Ниже приведены несколько основных правил удаления объектов:
У этих правил есть только одно исключение. Простые объекты данных, например, Прямоугольник и Точка, не используют ресурсы операционной системы. Они не поддерживают метод dispose(), и их удалять не нужно. В случае сомнений посмотрите документацию Javadoc для конкретного класса.
В качестве продолжения этого раздела перейдите к разделу Управление рабочими ресурсами.