代码之家  ›  专栏  ›  技术社区  ›  fastcodejava

首选项页面或字段编辑器引用页面

  •  2
  • fastcodejava  · 技术社区  · 15 年前

    在Eclipse中,什么是做首选项页面的最佳方法?

    1 回复  |  直到 15 年前
        1
  •  5
  •   VonC    15 年前

    灵感来自 this thread :

    可能有两类偏好:

    1. 那些只是 编辑器、视图或生成器在需要时使用并获取的数据 .
      在第一种情况下,最好的方法似乎是使用 FieldEditorPreferencePage 显示、输入、验证和存储首选项。
      为了获取这些值,子类可以提供方便的方法来获取首选项存储和查询,并返回给定ID的值。

    2. 那些 影响已在运行的编辑器或视图 .
      需要通知打开的编辑器和/或视图所发生的更改,以便它们相应地更新视图。
      这可以通过在 FieldEditorPreferencPage.performOk() 方法,但这似乎会造成不需要的耦合:首选项页必须知道如何更新相应的查看器。
      另一种可能性是利用 字段编辑器引用页面 是一个 IPropertyChangeListener 因此,编辑器可以注册对影响其视图的属性更改的兴趣。这种方法的缺点是,当删除编辑器或视图时,必须删除该兴趣,或者如果 首选项页在查看器关闭后更改。

    Bug 143727 参考有关首选项的最新(即“eclipse3.x”)文章:

    其附加的“BadWordChecker”首选项页面非常有趣,可以查看:

    /*
     * @see IWorkbenchPreferencePage#init(IWorkbench)
     */
    public void init(IWorkbench workbench) {
        //Initialize the preference store we wish to use
        setPreferenceStore(BadWordCheckerPlugin.getDefault().getPreferenceStore());
    }
    
    /**
     * Performs special processing when this page's Restore Defaults button has been pressed.
     * Sets the contents of the nameEntry field to
     * be the default 
     */
    protected void performDefaults() {
        badWordList.setItems(BadWordCheckerPlugin.getDefault().getDefaultBadWordsPreference());
    }
    /** 
     * Method declared on IPreferencePage. Save the
     * author name to the preference store.
     */
    public boolean performOk() {
        BadWordCheckerPlugin.getDefault().setBadWordsPreference(badWordList.getItems());
        return super.performOk();
    }