SWT/Jface 启用Properties view :PropertySheet
1. Perspective添加Properties view:ID=org.eclipse.ui.views.PropertySheet;
2. 实现ISelectionProvider接口(Viewer,Editor已经实现);
3. 打开界面时可以先激活一下properties view:
????? PlatformUI.getWorkbench().getActiveWorkbench().getActivePage().active(ID);
4. 如果一个面板有多个View时,切换属性显示是:
?// 切换展示属性的Viewer
??importVariableTreeViewer.getTree().addFocusListener(new FocusAdapter() {
???? @Override
???? public void focusGained(FocusEvent e) {
??????? ?if (getSite().getSelectionProvider()!=importVariableTreeViewer) {
???????????? ?getSite().setSelectionProvider(importVariableTreeViewer);
???????????? PlatformUI.getWorkbench().getActiveWorkbench().getView(ID).setFocus();
??????? }
?????}
??});
??exportVariableTreeViewer.getTree().addFocusListener(new FocusAdapter() {
????? @Override
????? public void focusGained(FocusEvent e) {
????????? if (getSite().getSelectionProvider()!=exportVariableTreeViewer) {
????????????? getSite().setSelectionProvider(exportVariableTreeViewer);
????????????? PlatformUI.getWorkbench().getActiveWorkbench().getView(ID).setFocus();
????????? }
????? }
??});
// 数据提供Po的实现有两种方式,一种是Po直接implements IPropertySource,另一种是Po implements IPropertySource;前者对序列化对象时会有一定的影响,而且耦合度高,推荐后者;
// 以下是后一种实现方式:
5. 点击时,所关联的Po应 implements IAdaptable,重写getAdapter(),如下:
??? @Override
????public Object getAdapter(Class adapter) {
??????? if (IPropertySource.class == adapter) {
?????????????? return new PoPropertySource(this);
??????? }
??????? return null;
??? }
6. PoPropertySource implements IPropertySource,主要实现方法:
??? // 返回Descriptor
??? @Override
??? public IPropertyDescriptor[] getPropertyDescriptors() {
??????? if (!Utils.isEmpty(descriptors)) return descriptors.toArray(new IPropertyDescriptor[0]);
??????? descriptors.add(new PropertyDescriptor(P_CLASS_REF, P_CLASS_REF));
??????? return descriptors.toArray(new IPropertyDescriptor[0]);
????}
??? // 返回数值
?? @Override
???? public Object getPropertyValue(Object id) {
?????????return?value
?? ??}
???如果有多级属性,将下级返回对象即可;?