2009-01-14 8 views
17

Чтобы открыть модальное диалоговое окно, вам необходимо передать родительское окно и передать необходимые флаги, чтобы диалог был модальным, конечно.Как получить окно рабочего стола, чтобы открыть модальный диалог в проекте на основе Eclipse?

В зависимости от того, где вы находитесь в инфраструктуре eclipse, найти это родительское окно не всегда легко.

Как можно получить доступ к родительскому окну?

ответ

20

С точки зрения или редактор (эта часть легко):

this.getSite().getWorkbenchWindow().getShell() 

Из других местах, доступ к представлению или редактор и так же, как выше.

Если вы оказались в классе, где у вас нет доступа к представлению или редактору, вы, вероятно, не захотите называть какой-либо код пользовательского интерфейса, но если вы действительно хотите стрелять в ногу:

PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell() 
0

не совсем то, что вы хотите сделать, но вам, возможно, придется использовать SWT.APPLICATION_MODAL, SWT.DIALOG_TRIM и т.д. при создании вашего диалога для того, чтобы сделать это модальное диалоговое окно (но, возможно, не о чем был ваш вопрос).

См. Это link для получения дополнительной информации.

+0

Да, это тоже. Но мой вопрос был более конкретно о том, как найти оболочку окна рабочего места. Я сделал это 6 месяцев назад и забыл в то же время, так что понял, что добавлю знания в stackoverflow. – Tirno

+0

@ Тирно. Мои самые верные ответы на StackOverflow - это просто заметки, которые я написал для себя, что знаю, что найду через Google месяцев или лет спустя, когда у меня будет тот же самый вопрос снова. – ArtOfWarfare

27

Кусок кода из предыдущего ответа будет работать. Однако имейте в виду, что вы можете только открыть свое диалоговое окно из потока пользовательского интерфейса. Если вы открываете диалог из другого потока, например. фоновый процесс, вам нужно сделать что-то вроде этого:

PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { 
    public void run() { 
     Shell activeShell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); 
    } 
}); 

В противном случае вы получите исключение при создании диалога.

+0

Конечно, я должен был добавить это. Что больше похоже на ту же проблему - вы должны знать, где найти эту функцию «getWorkbench()». – Tirno

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

  • Нет связанных вопросов^_^