如何将焦点放在 Eclipse RCP TitleAreaDialog 上?

How to give focus to Eclipse RCP TitleAreaDialog?

我的 Eclipse RCP View 中有一个按钮,可以生成一个带有表单的 TitleAreaDialog 弹出窗口。但是,当我单击该按钮时,TitleAreaDialog 会在我的视图后面弹出,而不是在它前面弹出以引起用户的注意。

我的对话框是这样声明的:

public class PopUpEditForm extends TitleAreaDialog {
    public PopUpEditForm(Shell parentShell) {
        super(parentShell);
        //Irrelevant logic
    }
//Other functions to populate/create the form
}

它是这样叫的:

public void editFeature(){
    Display disp = new Display();
    Shell she = new Shell(disp);
    PopUpEditForm p = new PopUpEditForm(she);
}

我尝试为用于显示表单的容器以及该容器的组件设置焦点 (.setFocus())。我也使用了 .forceActive() 但无济于事。哈尔普

编辑:解决方案

我用错了shell:

public void editFeature(){
    PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {

    public void run() {
            Shell activeShell =     PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
            PopUpEditForm p = new PopUpEditForm(activeShell);
    }        
}

尝试以下操作:

public void editFeature(){
    PopUpEditForm p = new PopUpEditForm(Display.getDefault().getActiveShell());
}

因为 PopUpEditForm 是一个 TitleAreaDialog,它需要一个父 shell,你不应该为它创建一个新的 shell,而是传递一个现有的 shell(就像主应用程序 shell)。

由于您处于 RCP 视图中,您还可以:

public void editFeature(){
    PopUpEditForm p = new PopUpEditForm(getSite().getShell());
}

我建议你使用:

    public void editFeature()
    {
Display disp = new Display();
Shell she = new Shell(disp);
PopUpEditForm p = new PopUpEditForm(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell());
    }

理想情况下,对话框应位于 window.

上方