我有一个Wizard
包含两个向导页面(org.eclipse.jface.wizard.WizardPage
),并希望分别为每个页面设置焦点,以便始终将每个页面的顶部输入字段都集中在一起。
在WizardPage.createControl(Composite)
中设置焦点,正确设置了第一页焦点。第二页没有焦点。
这是由于Wizard.createPageControls(Composite)
在一开始就创建了所有页面。
切换到下一个向导页面后,处理焦点的位置在哪里?
答案 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();
}
}