2013-10-23 54 views
0

我想在頁面的時間來初始化一個首選項頁面上的一些字段的值獲得打開 ,我想這對每個時間頁面在Project屬性窗口(Eclipse)中打開。Eclipse項目屬性/首選項頁:如何找到在項目屬性窗口中打開首選項頁面的情況下(Eclipse中)

+0

這是您要創建一個首選項頁面,或在現有的插件的網頁? –

+0

我沒有使用現有的首選項頁面,我正在創建一個新的首選項頁面。基本上,我想我喜歡的網頁與偏好商店更新,我試圖通過屬性更改偵聽器來實現,但即時得到org.eclipse.swt.SWTException:小工具設置例外 – vishal

回答

0

org.eclipse.jface.preference.PreferencePagesetPreferenceStore方法,你應該在你的首選項頁面構造函數中調用。經常指定的首選項存儲來自插件激活,就像從比較插件喜好這個例子:

setPreferenceStore(CompareUIPlugin.getDefault().getPreferenceStore()); 

有一個getPreferenceStore()方法來調用訪問此商店。

覆蓋,如果您希望每個頁面變得可見時間通知public void setVisible(boolean visible)

+0

但是,當頁面打開的構造函數只會被調用一次首先,因此我猜想每次打開頁面時都會觸發一些事件,然後相應的字段將從偏好存儲更新。 –

+0

每次顯示首選項對話框時都構建頁面。 –

+0

但在我的情況下,首選項頁面依賴於另一個頁面,所以構造函數將不起作用,因爲它只會在首選項對話框關閉後再調用,然後再次打開。 – vishal

1

試圖實現屬性更改偵聽。

這可能幫助 -

public class MyFieldEditorPreferencePage extends PropertyPage { 
private Text text; 

public void initialize() { 
    // TODO Auto-generated constructor stub 
    IProject project = (IProject) getElement().getAdapter(IProject.class); 

    final IPreferenceStore store = Activator 
      .getImpaktPreferenceStore(project); 

    store.addPropertyChangeListener(new IPropertyChangeListener() { 

     @Override 
     public void propertyChange(
       org.eclipse.jface.util.PropertyChangeEvent event) { 
      // TODO Auto-generated method stub 

      // TODO Auto-generated method stub 

      if (text != null && !text.isDisposed()) 
       text.setText(store.getString("key")); 

     } 
    }); 

    setPreferenceStore(store); 

} 

@Override 
protected Control createContents(Composite parent) { 
    // TODO Auto-generated method stub 

    initialize(); 
    GridLayout layout = new GridLayout(1, false); 
    parent.setLayout(layout); 
    GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true); 

    Composite container = new Composite(parent, 0); 
    container.setLayoutData(gridData); 

    GridLayout containerLayout = new GridLayout(2, false); 
    container.setLayout(containerLayout); 
    Label lbl = new Label(container, 0); 
    lbl.setText("Locale"); 

    text = new Text(container, SWT.BORDER); 
    text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); 

    text.setText(getPreferenceStore().getString("impakt.properties.locale")); 

    return parent; 
} 

}

+0

謝謝,它有幫助。 – vishal

相關問題