Preference Page和PropertyPage的一些相关知识.

原文 地址:http://blog.youkuaiyun.com/bradwoo8621/article/details/2509754

PropertyPage实际上是继承PreferencePage的. 这个从类就可以看到.

package org.eclipse.ui.dialogs ..... public abstract class PropertyPage extends PreferencePage implements IWorkbenchPropertyPage { }

view plain

打开PreferencePageDialog:

PreferenceManager manager = window.getWorkbench().getPreferenceManager(); PreferenceDialog dialog = new PreferenceDialog(window.getShell(), manager); dialog.open();

打开PropertyPageDialog:
PropertyDialog dialog = PropertyDialog.createDialogOn(shell, null, element); dialog.open();打开只有选定首选项页的Dialog:
WorkbenchPreferenceDialog dialog = WorkbenchPreferenceDialog.createDialogOn(parent.getShell(), id); dialog.showOnly(new String[] { id }); dialog.open();这些都是常规方法, 应该可以满足RCP开发的基本需求了.

另外就是大家可以看到有些PropertyPage上有"Enable project specific settings" 的CheckBox和"Configure Workspace Setting"的超链. 这个其实是JDT里面带的页面, 类名应该是PreferenceAndPropertyPage. 不过因为RCP不一定会用到JDT, 所以我写了一个简单的实现, 如下:

其中StingIDEMessages是一个NLS类, 应该不用多解释了.
import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Link; import org.eclipse.ui.IWorkbenchPropertyPage; import org.eclipse.ui.dialogs.PropertyPage; import org.eclipse.ui.internal.dialogs.WorkbenchPreferenceDialog; /** * 关联到首选项的属性页面 * * @author brad.wu * @since 0.1 */ public abstract class PreferenceAndPropertyPage extends PropertyPage implements IWorkbenchPropertyPage { private Button btnEnableProjectSettings; /** * (non-Javadoc) * * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite) */ @Override protected final Control createContents(final Composite parent) { Composite container = new Composite(parent, SWT.NONE); container.setLayoutData(new GridData(GridData.FILL_BOTH)); GridLayout layout = new GridLayout(); layout.numColumns = 2; container.setLayout(layout); btnEnableProjectSettings = new Button(container, SWT.CHECK); btnEnableProjectSettings .setText(StingIDEMessages.PreferenceAndPropertyPage_enableProjectSettingsLabel); btnEnableProjectSettings.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER, true, false, 1, 1)); Link link = new Link(container, SWT.NONE); link .setText("<a>" + StingIDEMessages.PreferenceAndPropertyPage_configWorkspaceSettingsLink + "</a>"); link.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER, false, false, 1, 1)); Label label = new Label(container, SWT.SEPARATOR | SWT.HORIZONTAL); label.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 2, 1)); final Composite comp = new Composite(container, SWT.NONE); comp.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true, 2, 1)); comp.setLayout(new GridLayout()); createCustomContents(comp); setEnabled(comp, false); btnEnableProjectSettings.addSelectionListener(new SelectionAdapter() { /** * (non-Javadoc) * * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent) */ @Override public void widgetSelected(SelectionEvent e) { boolean selected = btnEnableProjectSettings.getSelection(); setEnabled(comp, selected); } }); link.addSelectionListener(new SelectionAdapter() { /** * (non-Javadoc) * * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent) */ @Override public void widgetSelected(SelectionEvent e) { String id = getRelatedPreferencePageId(); WorkbenchPreferenceDialog dialog = WorkbenchPreferenceDialog .createDialogOn(parent.getShell(), id); dialog.showOnly(new String[] { id }); dialog.open(); } }); return container; } /** * 创建组件 * * @param parent */ protected abstract void createCustomContents(Composite parent); /** * 获取相关的首选项页面ID * * @return */ protected abstract String getRelatedPreferencePageId(); /** * 获取项目设置是否已经被启用 * * @return */ protected boolean isProjectSettingsEnabled() { return btnEnableProjectSettings.getSelection(); } /** * 设置可用性 * * @param comp * @param selected */ private void setEnabled(final Composite comp, boolean selected) { comp.setEnabled(selected); Control[] controls = comp.getChildren(); if (controls != null) { for (Control control : controls) { control.setEnabled(selected); if (control instanceof Composite) { setEnabled((Composite) control, selected); } } } } /** * 设置是否启用项目设置 * * @param enabled */ protected final void setEnableProjectSettings(boolean enabled) { btnEnableProjectSettings.setSelection(enabled); } }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值