我正在处理插件,并尝试在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;
}
...
}
答案 0 :(得分:0)
你真的需要创建另一个Shell
吗?为什么不使用您已经拥有的那个作为对话的父级?这可能是后台"额外空白对话框的原因"。
您应该能够在自定义对话框中设置覆盖getInitialLocation
的初始位置:
@Override
protected Point getInitialLocation(Point initialSize) {
return new Point(10, 10); // x and y coordinates of the initial position
}