如何在基于Eclipse的项目中使工作台窗口打开一个模态对话框?

20
为了打开一个模态对话框,你需要传递一个父窗口,并传递必要的标志,以确保对话框是模态的。
根据你在Eclipse基础设施中所处的位置,找到这个父窗口并不总是容易的。
如何访问父窗口?
3个回答

30

前面答案中的代码片段是可用的。但请记住,您只能从UI线程打开对话框。如果您正在从另一个线程(例如后台进程)打开对话框,则需要执行以下操作:

PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
    public void run() {
        Shell activeShell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
    }
});
否则,当创建对话框时会抛出异常。

当然,我应该补充一下。这是同样的问题 - 你必须知道在哪里找到“getWorkbench()”函数。 - Tirno

25

从视图或编辑器(这部分很容易):

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

从其他地方访问视图或编辑器并执行与上面相同的操作。

如果你发现自己在一个没有访问视图或编辑器的类中,你可能不想调用任何UI代码,但如果你真的想要给自己脚上开枪:

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

0

虽然不完全是你想要做的,但在创建对话框时,你可能需要使用SWT.APPLICATION_MODALSWT.DIALOG_TRIM等来使其成为模态对话框(但也许这不是你问题的关键)。

请参阅链接以获取更多信息。


是的,也包括这个。但是我的问题更具体地是如何找到工作台窗口的外壳。我六个月前做过一次,期间忘记了,所以想把这个小知识点添加到stackoverflow上。 - Tirno
@Tirno - 我在StackOverflow上得到最多赞的答案只是我为自己写的笔记,我知道当我再次遇到完全相同的问题时,几个月或几年后,我可以通过谷歌找到它们。 - ArtOfWarfare

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接