现在我在第一页选择中添加了am able to set the content of my second wizard's page depending,现在我正在寻找一种方法,当用户单击第一页上的下一个按钮时,将注意力集中到第二页的内容上。

默认情况下,当用户单击下一个按钮时,焦点将集中在按钮组合上(下一个,后退或完成按钮,具体取决于向导配置)

我发现将重点放在页面内容上的唯一方法是以下方法:

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子类化,尽管很少需要这样做。

您如何看待该解决方案?有没有更简单,更清洁的解决方案来完成这项工作?

最佳答案

这个thread建议:

在向导页面中,使用继承的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();
                }
            }
        );
    }
}

08-27 23:28