题
现在,我我能够设置在第一页上我的第二个向导页面取决于的内容选择,我正在寻找一种方式来将焦点放到我的第二页的内容,当用户点击第一页上的下一个按钮。
默认情况下,当用户点击下一步按钮时,焦点被提供给按钮复合物(下,背部或取决于向导配置完成按钮)
我发现焦点赋予我的网页内容的唯一方法是以下之一:
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();
}
});
}
}
不隶属于 StackOverflow