Eclipse插件:打开对话框和quickfix

时间:2016-06-09 19:56:38

标签: java eclipse swt jface

我正在处理插件,并尝试在quickfix菜单周围添加一些附加信息,这些信息是通过单击我的自定义标记触发的。

我在MarkerResolutionGenerator.getResolutions()中添加一个方法调用来绘制新的对话框窗口,但是我无法让它同意quickfix对话框。我可以同时绘制它,但我无法控制位置,它还在后台绘制了一个额外的空白对话框。

有什么想法?相关代码如下。前两个方法来自我的MarkerResolutionGenerator,我的自定义类位于其下方。 (我只是从一个例子中复制它,我更担心在我处理内容之前让它表现出来。)

@Override
public IMarkerResolution[] getResolutions(IMarker marker) 
{
    IMarker problem = marker;

    makeStuff();
    ...
}

private void makeStuff()
{
    Display display = Activator.getDefault().getWorkbench().getDisplay();
    Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor()
            .getSite().getWorkbenchWindow().getShell();

    Shell myShell = new Shell(shell, SWT.NO_TRIM);

    MyDialog md = new MyDialog(myShell);
    md.open();
}


public class MyDialog extends Dialog
{
    public MyDialog(Shell parentShell) 
    {
        super(parentShell);
        setShellStyle(SWT.CLOSE | SWT.MODELESS | SWT.BORDER | SWT.TITLE);
        setBlockOnOpen(false);
    }

    @Override
    protected Control createDialogArea(Composite parent) 
    {
        Composite container = (Composite) super.createDialogArea(parent);
        Button button = new Button(container, SWT.PUSH);
        button.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
        button.setText("Press me");
        button.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                System.out.println("Pressed");
            }
        });

        return container;
    }
    ...
}

1 个答案:

答案 0 :(得分:0)

你真的需要创建另一个Shell吗?为什么不使用您已经拥有的那个作为对话的父级?这可能是后台"额外空白对话框的原因"。

您应该能够在自定义对话框中设置覆盖getInitialLocation的初始位置:

@Override
protected Point getInitialLocation(Point initialSize) {
    return new Point(10, 10);  // x and y coordinates of the initial position
}