如何在Eclipse插件中编写基于SWT的GUI?

时间:2013-05-08 19:33:14

标签: java eclipse-plugin swt

我学习了如何在tutorial之后编写基于SWT的应用程序。但是,我不知道如何进入GUI eclipse插件。

我正在编写的插件右键单击Package Explorer中的任何IJavaElement节点,它将再显示一个操作,该操作将显示一个GUI对话框,让我填写一些值并将结果保存到我的数据库

现在我的问题是:

  • 我可以编写一个独立的基于SWT的GUI应用程序,但我不知道如何将以下代码段放在public void run(IAction action)

    Display display = new Display();
    Shell shell = new Shell(display);
    
    shell.setLayout(new GridLayout());
    shell.open();
    
    while (!shell.isDisposed()) {
        if (!display.readAndDispatch())
            display.sleep();
    }
    display.dispose();
    

    我找到的所有SWT教程都是创建Shell,显示在一个main中,但看起来你应该在Eclipse插件中做不同的事情。在开发Eclipse插件时,是否必须使用JFace创建Dialog?

  • 如果不在plugin.xml依赖项中添加org.eclipse.swt(.cocoa.macosx.x86_64.source),我只有在IJavaElement右键单击时才会显示该操作。但是当我尝试运行该动作时,eclipse将显示

    Problem Occurred
    Unhandled event loop exception
    Not implemented [multiple displays]
    

    我想这是因为我又增加了一个Display。但是,如果我将org.eclipse.swt(.cocoa.macosx.x86_64.source)添加到plugin.xml依赖项中,我的操作甚至不会显示在弹出菜单中。

1 个答案:

答案 0 :(得分:3)

您的代码正在创建一个新的显示 - 在创建Eclipse插件时不应该这样做。 Eclipse已经运行了显示和事件循环。

尝试将此代码放入您的操作中:

Shell shell = new Shell(Display.getCurrent());

shell.setLayout(new GridLayout());
shell.open();