如何关注Eclipse RCP TitleAreaDialog?

时间:2016-03-03 02:50:36

标签: java eclipse dialog eclipse-rcp rcp

我的Eclipse RCP视图中有一个按钮,它使用表单生成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()但无济于事。 HALP。

编辑:解决方案

我使用了错误的shell:

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

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

2 个答案:

答案 0 :(得分:1)

尝试以下方法:

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

由于PopUpEditForm是需要父shell的TitleAreaDialog,因此您不必为其创建新的shell,而是传递现有的shell(如主应用程序shell)。

由于您处于RCP视图中,您可能也会这样做:

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

答案 1 :(得分:1)

我建议你使用:

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

理想情况下,对话框应位于窗口上方。