[英]Eclipse JFace's Wizards (Again …)
現在,我可以根據第一頁選擇設置第二個向導頁面的內容 ,我正在尋找一種方法,當用戶單擊第一頁上的下一個按鈕時,將焦點放在第二頁的內容上。
默認情況下,當用戶單擊下一個按鈕時,焦點將放在按鈕組合上(下一個,后退或完成按鈕,具體取決於向導配置)
我發現將焦點放在頁面內容上的唯一方法是:
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();
}
});
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.