在哪里设置向导页面的焦点?

Where to set the focus in wizard pages?

我有一个包含两个向导页面 (org.eclipse.jface.wizard.WizardPage) 的 Wizard,我想分别为每个页面设置焦点,以便始终聚焦每个页面的顶部输入字段。

WizardPage.createControl(Composite)中设置焦点,首页焦点设置正确。第二页没有焦点。 这是由于 Wizard.createPageControls(Composite) 在开头创建了所有页面。

切换到下一个向导页面后,处理焦点的地方在哪里?

覆盖 WizardPage setVisible 方法并在页面可见时设置焦点:

@Override
public void setVisible(boolean visible) {
    super.setVisible(visible);

    if (visible) {
       // TODO set focus
    }
}

JFace 向导不提供指定的挂钩来设置焦点。但是,正如 Greg 已经提到的,setVisible() 方法可用于设置向导页面的初始焦点。

通常,向导页面的焦点只应在第一次显示页面时设置。如果用户 returns 返回页面,焦点应保持在页面离开时的位置。

因此,我通常会保护焦点代码,使其仅在页面首次显示时执行:

private boolean firstTimeShown = true;

@Override
public void setVisible( boolean visible ) {
  super.setVisible( visible );
  if( visible && firstTimeShown ) {
    firstTimeShown = False;
    control.setFocus();
  }
}