Статьи

Вернуться к основам: дисплей, оболочка, окно …

Каждый разработчик плагинов Eclipse имеет дело с Shell и Window, но иногда не понимает разницу между этими двумя. В этом совете я пытаюсь объяснить основные вещи: отображение, оболочка, окно, диалог, Workbench, WorkbenchPart, WorkbenchSite и WorkbenchPage. Да, я знаю, это, вероятно, скучный пост, который вы можете прочитать в этом блоге, если у вас мало опыта в этих областях.

Дисплей :

Этот класс является связующим звеном между SWT и базовой ОС. Он управляет взаимодействием между виджетами и ОС. Основная задача этого класса — поддерживать цикл событий (
readAndDispatch () ). Если вы не пишете простое приложение SWT, вы не будете его использовать. Наиболее распространенными методами, которые вы используете в этом классе, являются
asyncExec () ,
syncExec () и
timerExec () , которые позволяют вам запускать фрагмент кода в потоке пользовательского интерфейса. (так называемый поток пользовательского интерфейса или поток отображения)

Оболочка :

Shell is the «window» that you see in your desktop. The one that has a title, maximize, minimize, restore and close buttons. A shell can be either a top-level shell (no parent shell) or can be a secondary shell (will have a parent shell). The style that is passed in the constructor defines which of the above mentioned buttons are displayed and also whether the Shell is modal or not. If you are on a pure SWT app, then you should be create a Shell; create controls in it; open it; run the event loop; and dispose it. Speaking in code:

Shell shell = new Shell(display);
// set layout and create widgets
shell.open ();
while (!shell.isDisposed ()) {
if (!display.readAndDispatch ()) display.sleep ();
}
display.dispose ();

Window:

Если вы разрабатываете плагины / приложения JFace, лучше использовать Window, а не Shells напрямую, потому что он управляет вышеуказанными задачами для вас. Это не так, но думать об этом как обертка для Shell. Когда вы используете Window, Shell не создается, пока не будет вызван метод open (). Поскольку оболочка не создается до тех пор, пока окно не будет открыто и окна могут быть открыты повторно (да, вы можете открыть ее снова), настройку оболочки следует выполнить с помощью метода configureShell (). Помните, что это абстрактный класс, и вы не можете использовать его напрямую. Вы должны либо использовать Dialog или ApplicationWindow, либо свой собственный конкретный класс.

Диалог :

Когда вам нужно специализированное общение с пользователем, вы должны использовать диалоги. Во всех остальных случаях вы будете использовать ApplicationWindow. Диалог — это больше вспомогательных окон, которые прикреплены к другому главному окну. PreferenceDialog, PropertyDialog, ErrorDialog, InputDialog и WizardDialog — это некоторые часто используемые диалоги.

Окно приложения :

Окно + поддержка меню + поддержка панели инструментов + поддержка Coolbar + поддержка строки состояния = ApplicationWindow ?

IWorkbenchWindow :

WorkbenchWindow — это специфичное для Eclipse ApplicationWindow, которое добавляет несколько служб и набор IWorkbenchPages в ApplicationWindow. Хотя в Javadoc написано «Каждое окно рабочей среды имеет набор из 0 или более страниц», в действительности оно имеет только одну страницу. Я считаю, что это связано с обратной совместимостью с Eclipse 1.0.

IWorkbenchPage :

Область, которая находится между панелью инструментов и строкой состояния WorkbenchWindow, называется WorkbenchPage. Проще говоря, это тело WorkbenchWindow, в котором отображаются все редакторы и представления. IWorkbenchPage содержит IWorkbenchParts, которые являются визуальным представлением видов и редакторов. И IViewPart, и IEditorPart являются производными от
IWorkbenchPart.

IWorkbenchSite :

IWorkbenchPart находится внутри IWorkbenchPage. Таким образом, он не имеет прямого доступа к самому рабочему столу. Поэтому, когда ему нужно взаимодействовать с верстаком, ему нужен IWorkbenchSite. Например, чтобы получить оболочку внутри представления, вы вызываете getSite (). GetShell ().

С http://blog.eclipse-tips.com/