现在,我我能够设置在第一页上我的第二个向导页面取决于的内容选择,我正在寻找一种方式来将焦点放到我的第二页的内容,当用户点击第一页上的下一个按钮。

默认情况下,当用户点击下一步按钮时,焦点被提供给按钮复合物(下,背部或取决于向导配置完成按钮)

我发现焦点赋予我的网页内容的唯一方法是以下之一:

public class FilterWizardDialog extends WizardDialog {

    public FilterWizardDialog(Shell parentShell, IWizard newWizard) {
        super(parentShell, newWizard);
    }

    @Override
    protected void nextPressed() {
        super.nextPressed();
        getContents().setFocus();
    }
}

对我来说,是一个有点“闷重”有覆盖,以实现这一行为的WizardDialog类。更完了,WizardDialog的Javadoc表示:

  

客户端可能子类WizardDialog,虽然这很少需要。

你觉得这个怎么样的解决方案?有没有更简单和更清洁的解决方案做的工作?

有帮助吗?

解决方案

螺纹表明:

  

在您的向导页面,使用示出的页之前被自动调用继承setVisible()方法:

public void setVisible(boolean visible) {
   super.setVisible(visible);
   // Set the initial field focus
   if (visible) {
      field.postSetFocusOnDialogField(getShell().getDisplay());
   }
}

在postSetFocusOnDialogField方法包含:

/**
 * Posts <code>setFocus</code> to the display event queue.
 */
public void postSetFocusOnDialogField(Display display) {
    if (display != null) {
        display.asyncExec(
            new Runnable() {
                public void run() {
                    setFocus();
                }
            }
        );
    }
}

其他提示

VonC的答案的伟大工程,我个人认为这是一个更容易一些喜欢一起工作这虽然:

@Override
public void setVisible(boolean visible) {
    super.setVisible(visible);
    if (visible) {
        Control control = getControl();
        if (!control.setFocus()) {
            postSetFocus(control);
        }
    }
}

private void postSetFocus(final Control control) {
    Display display = control.getDisplay();
    if (display != null) {
        display.asyncExec(new Runnable() {
            @Override
            public void run() {
                control.setFocus();
            }
        });
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top