Среда компонентов

Среда компонентов предоставляет простой API для форм и редакторов (они также называются компонентами), что позволяет комбинировать компоненты и использовать одни компоненты внутри других. API среды компонентов позволяет клиентам помещать компоненты в сторонние графические элементы пользовательского интерфейса SWT и добавлять новые интерфейсы, делает программы более устойчивыми к ошибкам и утечкам памяти (дело в том, что компонент взаимодействует только с локальными интерфейсами). Клиенты могут создавать собственные многоразовые компоненты, использующие тот же API, что панели и редакторы. Среда компонентов также позволяет создавать и уничтожать объекты, используя атомарные операции, и допускает использование компонентами новых интерфейсов.

Форма NameViewNew

Приведем пример формы с заданным именем, заголовком, всплывающей подсказкой. Форма отображает некоторый рисунок. Пример показывает, как можно создать редактор или форму с помощью среды компонентов. Используется API компонентов. Компонентам можно передавать аргументы через их конструкторы, нет необходимости реализовывать отдельный интерфейс или производить компонент от базового класса.

/**
 * Форма с заданным именем, всплывающей подсказкой, выводимым изображением и описанием содержимого. Форма
 * используется изображение, предоставляемое модулем.
 *
 * @since 3.1
 */
public class NameViewNew {
    /**
     * Конструктор компонента. Не вызывается напрямую.
     */
    public NameViewNew(Composite parent, INameable name, IPluginImages images) {
        name.setName("Name View (New)");
        name.setContentDescription("content description");
        name.setTooltip("This is a tooltip");
        name.setImage(images.getImage("icons/sample.gif"));
       
        // Наполним форму чем-либо
        Label content = new Label(parent, SWT.NONE);
        content.setText("Здесь отображается содержимое формы");
    }
}

Обратите внимание, что аргументы, передаваемые конструктору формы, не требуют дополнительных сведений о контексте. К примеру, нет необходимости сообщать интерфейсу IPluginImages, какому модулю принадлежит панель. Интерфейсы устойчивы к утечкам памяти. В этом примере изображение, располагаемое на форме, помещается в память и удаляется из нее реализацией INameable, поэтому не нужно реализовывать этот метод в самой форме.

API для форм и редакторов один и тот же. Другими словами, если мы зарегистрировали класс NameViewNew с помощью точки расширения org.eclipse.ui.editors, ее можно будет использовать как редактор без каких-либо дополнительных изменений.