在向导页面中设置焦点的位置?

时间:2016-10-13 11:40:55

标签: java eclipse swt jface

我有一个Wizard包含两个向导页面(org.eclipse.jface.wizard.WizardPage),并希望分别为每个页面设置焦点,以便始终将每个页面的顶部输入字段都集中在一起。

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

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

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

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

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

因此,我通常会保护焦点代码,以便仅在第一次显示页面时执行:

private boolean firstTimeShown = true;

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