自訂Eclipse中點擊Propertyies彈出的喜好設定對話方塊,我們可以將其用在我們自己的RCP中。步驟如下:1.定義PreferenceDialog,如:
public class PropertyPreferenceDialog extends PreferenceDialog
2.完成構造方法。如:private ITreeEntry entry;//傳一個樹結點類型進來public PropertyPreferenceDialog(Shell parentShell,ITreeEntry entry) {super(parentShell, new PreferenceManager());//這裡直接new了一個PreferenceManager對象傳給構造方法this.entry = entry;GeneralPage generalPage = new GeneralPage(entry);//通用設定頁面 getPreferenceManager().addToRoot(new PreferenceNode("general",generalPage));//注意這裡的PreferenceNodegetPreferenceManager().addToRoot(new PreferenceNode("editor",new EditorPage(entry))); PreferenceNode node = new PreferenceNode("feed",new PreferencePage("綜合") {//結點,PreferenceNode是一個抽象類別@Override protected Control createContents(Composite parent) { noDefaultAndApplyButton();//這句話放在這裡也可以,放在構造方法也是一樣,當然這裡沒必要再定義一個構造方法了,用預設的即可 return new Composite(parent, SWT.NONE); } }); node.add(new PreferenceNode("general",generalPage)); node.add(new PreferenceNode("editor",new EditorPage(entry))); getPreferenceManager().addToRoot(node);}3.定義各個preferencePage。如:public class GeneralPage extends PreferencePage implementsIWorkbenchPreferencePage {private ITreeEntry entry;private Text textId;/** * Create the preference page */public GeneralPage(ITreeEntry entry) {super("通用");this.entry = entry;noDefaultAndApplyButton();//不顯示恢複預設和取消按鈕}/** * Create contents of the preference page * @param parent */@Overridepublic Control createContents(Composite parent) {Composite container = new Composite(parent, SWT.NULL);container.setLayout(new GridLayout(2,false)); final Label idLabel = new Label(container, SWT.NONE);idLabel.setText("ID:"); textId = new Text(container, SWT.BORDER);final GridData gd_textId = new GridData(SWT.FILL, SWT.CENTER, true, false);textId.setLayoutData(gd_textId);if(entry != null ){textId.setText(String.valueOf(entry.getId()));}
return container;} /** * Initialize the preference page */public void init(IWorkbench workbench) {
}}//當然,視使用方式,不實現IWorkbenchPreferencePage也是可以的。 4.彈出屬性對話方塊public class PropertyAction extends Action { private TreeViewer treeViewer; public PropertyAction(TreeViewer treeViewer){ this.treeViewer = treeViewer; this.setText("屬性"); } @Override public void run(){ IStructuredSelection selectNode = (IStructuredSelection) treeViewer.getSelection(); if(selectNode.isEmpty()){ return; } ITreeEntry entry = (ITreeEntry) selectNode.getFirstElement(); if(entry==null){ return; } PropertyPreferenceDialog ppd = new PropertyPreferenceDialog(treeViewer.getControl().getShell(),entry); ppd.setSelectedNode("editor");//這個功能倒是蠻好的。可以定位到某一頁,這樣對使用者來說也是很友好的 ppd.open(); }}