0

我正在尝试使用 SWT 在 eclipse 插件中创建对话框。我可以创建一个 Shell 和一个 Display 对象,并且代码编译没有问题,但是在调试插件时我看不到任何类型的对话框,尽管在独立应用程序中使用相同的代码时可以完美运行。

这是我在实现 IWorkbenchWindowActionDelegate 的 SampleAction 的 run 方法中编写的示例代码

Display display = new Display();
Shell shell = new Shell(display);
shell.open();


while(!shell.isDisposed())
{
    if(!display.readAndDispatch())
    {
        display.sleep();
    }
}

display.dispose();

我还尝试删除 readAndDispatch 并编写了这段代码,但它仍然不起作用..我什么也没看到

    Display display = new Display();
    Shell shell = new Shell(display);
    shell.open();
    MessageDialog dialog = new MessageDialog(shell, "My Title", null,
            "My message", MessageDialog.ERROR, new String[] { "First",
          "Second", "Third" }, 0);
    int result = dialog.open();
4

2 回答 2

3

这将完成这项工作。无需事先打开新外壳。只需将新的 Shell 传递给MessageDialog.

MessageDialog dialog = new MessageDialog(new Shell(), "My Title", null,
        "My message", MessageDialog.ERROR, new String[] { "First",
      "Second", "Third" }, 0);
int result = dialog.open();

您还可以使用parentShell您当前所在的 GUI 部分的 并将其传递给对话框。

于 2012-08-30T14:43:37.570 回答
1

请注意,使用新 shell 作为模态对话框的父级可能会给用户带来不便,因为对话框可能位于主工作台窗口后面,因此用户既看不到对话框,也无法在主工作台窗口中执行任何操作。解决方案是将窗口外壳作为父级传递给对话框。由于您的操作是 IWorkbenchWindowActionDelegate,您应该记录传递给 init 方法的窗口,然后使用 window.getShell() 获取父 shell。

请注意,在编写插件时,您不应该创建显示或运行事件队列(即 readAndDispatch)(除非您想要一个无模式对话框 - 这是一个单独的主题)。

于 2012-08-31T15:54:45.260 回答