2014-11-13 3 views
2

В моем приложении я хочу выставить JFACE WizardDialog, который принимает аргумент shell в своем конструкторе.Какая оболочка должна быть передана конструктору WizardDialog

Я попытался получить оболочку 2 различными способами:

  1. Shell shell = new Shell(display);

  2. Shell shell = display.getActiveShell();

Оба пути, казалось, прекрасно работать, так как они создали хороший модальный диалог. Мой вопрос: какой из них правильный?

Имеет смысл создать экземпляр новой оболочки, но зачем мне это делать, если активная оболочка работает?

ответ

1

Shell, который передается WizardDialog, является его родительской оболочкой , которая, например, управляет тем, на каком мониторе будет отображаться диалог. Родительская оболочка также влияет на жизненный цикл диалогов. Если родительская оболочка закрыта, все ее дочерние оболочки также закрываются (см. Ниже).

Диалог не использует эту оболочку для создания своего содержимого. Поэтому будет создана новая оболочка.

Поэтому вам не следует создавать новую оболочку, но использовать существующую. display.getActiveShell() работает в большинстве случаев, но я рекомендую использовать хорошо известную оболочку.

Возможна ошибка при открытии диалога в приложении Workbench Eclipse (RCP или подключаемом модуле Eclipse IDE): display.getActiveShell() может возвращать диалоговое окно монитора выполнения, если оно открыто при открытии мастера и неожиданно закроет диалоговое окно мастера, когда будет выполнена отчет о ходе выполнения. Окно активного рабочего стола обычно является хорошей альтернативой.

Смежные вопросы