2

EclipseRCPアプリケーションがあります。私自身IntroPartが拡張しorg.eclipse.ui.part.IntroPartます。

継承を通じて、私はこのメソッドを取得しました:

@Override
public void saveState(IMemento memento) {
}

ここでは、ワークベンチがシャットダウンさsaveStateれると、開いているすべてのビューでメソッドが呼び出されると述べられています。ただし、これは、アプリケーション全体を閉じた場合にのみ当てはまります。

ホールアプリケーションではなく、このページのみを閉じる前にイントロページの状態を保存するにはどうすればよいですか?

4

1 に答える 1

3

FAQへのリンクは、次のような回答を提供します。

ビュー ステートを永続化するもう 1 つのメカニズムは、JFace IDialogSettings 機能です。ビューの保存/初期化メカニズムに対するダイアログ設定の利点は、設定を永続化するタイミングを制御できることです。

これは、閉じたときに IDialogSettings を使用して IntroPart の状態を保持する方法と、作成時に復元する方法の例です。MyIntroPart は、Textウィジェットを持つ IntroPart です。表示されたテキストは、IntroPart を閉じたときに保存され、作成時に復元されます。

イベントを取得するためにpartClosed、MyIntroPart は IPartListener2 を実装し、それ自体を PartService に登録します。

private static final String MY_INTRO_SETTINGS = "my_intro_settings";
private static final String MY_INTRO_TEXT_KEY = "my_intro_text";

@Override
public void createPartControl(Composite parent) {
    this.text = new Text(parent, SWT.BORDER);

    // try to load the settings
    IDialogSettings settings = Activator.getDefault().getDialogSettings();
    IDialogSettings section = settings.getSection(MyIntroPart.MY_INTRO_SETTINGS);
    if (section != null) {
        // set the restored text string in the text widget
        this.text.setText(section.get(MyIntroPart.MY_INTRO_TEXT_KEY));
    }

    // register the part listener
    getIntroSite().getWorkbenchWindow().getPartService().addPartListener(this);
}

これにより、テキストがテキスト ウィジェットに復元されます。

MyIntroPart は IPartListener2 を実装partClosedして、ビューが閉じられたときにダイアログ設定を保存します。

@Override
public void partClosed(IWorkbenchPartReference partRef) {
    // remove part listener from part service
    getIntroSite().getWorkbenchWindow().getPartService().removePartListener(this);

    IDialogSettings settings = Activator.getDefault().getDialogSettings();

    // get the section of the text
    IDialogSettings section = settings.getSection(MyIntroPart.MY_INTRO_SETTINGS);

    // if it doesn't exist, create it
    if (section == null) {
        section = settings.addNewSection(MyIntroPart.MY_INTRO_SETTINGS);
    }

    // put text from text field in section
    section.put(MyIntroPart.MY_INTRO_TEXT_KEY, this.text.getText());
}

ここでは、ファイルからの読み込みやファイルへの保存が不要であることを指摘してくれた fredrik に感謝します。

于 2012-12-07T20:08:28.220 に答える