質問

今、私がhref="https://stackoverflow.com/questions/954443/eclipse-jfaces-wizards">は、最初のページに私の2番目のウィザードのページによってはの内容を設定することができる午前

デフォルトでは、ユーザーは次のボタンをクリックすると、フォーカスは、

(次回、バックまたはウィザードの構成に応じて終了ボタン)ボタンコンポジットに与えられ、

私は私のページのコンテンツにフォーカスを与えることが判明唯一の方法は、次のいずれかです。

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帰属
所属していません StackOverflow
scroll top