Окна диалога приложений

Если возможностей стандартного окна диалога недостаточно для реализации модуля, с помощью класса Dialog можно создать собственное окно диалога. В предыдущих разделах было показано, каким образом утилита readme добавляет действие "Открыть браузер Readme" в набор действий. Этот набор действий доступен на панели инструментов рабочей среды, а также в меню Окно->Редактор файлов Readme.   

Теперь можно рассмотреть реализацию этого действия в классе утилиты readme WindowActionDelegate.

   public void run(IAction action) {
      SectionsDialog dialog = new SectionsDialog(window.getShell(),
         ReadmeModelFactory.getInstance().getSections(selection));
      dialog.open();
   }

Делегат действия окна, предусмотренный для набора действий, получает список разделов файла readme в соответствии с элементами, выбранными на панели навигатора ресурсов (файл .readme). Этот список и оболочка окна рабочей среды передаются классу SectionsDialog.  

В результате выбора пользователем одного из действий открывается окно диалога SectionsDialog.

Класс SectionsDialog реализован в утилите readme путем наследования класса Dialog, входящего в состав пакета org.eclipse.jface.dialogs.

Класс Dialog предоставляет базовую поддержку для создания окна оболочки, общих кнопок, а также запуска окна диалога. Производные классы отвечают непосредственно за обработку содержимого окна диалога:

Класс SectionsDialog не реализует метод okButtonPressed. Он наследует реализацию, не предусматривающую выполнение каких-либо действий, из класса Dialog. Это не является типичным. Как правило, окно диалога выполняет обработку событий, связанных с нажатием кнопок.

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

Выпадающие окна диалога

В некоторых случаях, нужно показать какую-либо информацию в окне диалога, но более "простым" способом, чем с помощью запуска обычного окна диалога. Например, окно диалога должно содержать временную информацию, на которую можно не обращать особого внимания пользователя. В этом случае для реализации окна диалога можно использовать класс PopupDialog. PopupDialog в некоторых отношениях выглядит иначе, чем обычный Dialog. У него нет никаких кнопок внизу, нет стандартного заголовка окна, его границы и шрифты имеют меньший размер и более компактны.

Хотя PopupDialog выглядит иначе, чем обычное окно диалога, исходный код в вашем подклассе модуля, который определяет его содержимое, почти такой же. Вам так же необходимо реализовать метод createDialogArea для создания управляющих элементов SWT окна диалога. Основное различие состоит в том, что конструктор, создающий окно диалога, имеет намного больше параметров, чем обычный класс Dialog. Например, SectionsDialog можно превратить в PopupDialog, просто изменив суперкласс окна диалога и настроив окно диалога в конструкторе:

   public class SectionsDialog extends PopupDialog {
      protected IAdaptable input;

      /**
      * Создает новый SectionsDialog.
      */
      public SectionsDialog(Shell parentShell, IAdaptable input) {
        super(parentShell, SWT.DEFAULT, false, // не получать фокус при открытии
        	false, // не сохранять расположения
        	false, // не показывать меню изменения размера
        	false, // не показывать пункт меню для сохранения расположения
        	null, //  без заголовка
        	null); // без текста информации 
        this.input = input;
      }
      ...