eclipse平台为我们提供了一系列的基础设施,Properties视图就是一个。我们可以通过Properties视图来查看/修改模型的属性值。
若希望能在Properties视图编辑模型属性,需要适配出IPropertySource。实现getAdapter()返回模型对应的IPropertySource实现。
实现下面4个步骤,就可以实现简单的模型属性编辑了。
1、在模型所在的视图或Editor实现类的init()方法中,添加 getSite().setSelectionProvider(viewer); 把viewer视图的选择事件“广播”给workbench平台。
public class SampleView extends ViewPart { public void createPartControl(Composite parent) { // 。。。 viewer.setContentProvider(new BaseWorkbenchContentProvider()); viewer.setLabelProvider(new WorkbenchLabelProvider()); viewer.setInput(ctlList); getSite().setSelectionProvider(viewer); }
2、实现IPropertySource接口,返回与模型字段对应的PropertyDescriptor(<-CellEditor)
public class ButtonElementProperties implements IPropertySource { final protected ButtonElement element; protected static final String PROPERTY_FONT = "font"; protected static final String PROPERTY_SIZE = "size"; protected static final String PROPERTY_TEXT = "text"; private final Object PropertiesTable[][] = { { PROPERTY_FONT, new FontPropertyDescriptor(PROPERTY_FONT,"Font")}, { PROPERTY_SIZE, new PropertyDescriptor(PROPERTY_SIZE,"Size")}, { PROPERTY_TEXT, new TextPropertyDescriptor(PROPERTY_TEXT,"Text")}, }; public IPropertyDescriptor[] getPropertyDescriptors() { // Create the property vector. IPropertyDescriptor[] propertyDescriptors = new IPropertyDescriptor[PropertiesTable.length]; for (int i=0;i<PropertiesTable.length;i++) { // Add each property supported. PropertyDescriptor descriptor; descriptor = (PropertyDescriptor)PropertiesTable[i][1]; propertyDescriptors[i] = (IPropertyDescriptor)descriptor; descriptor.setCategory("Basic"); } // Return it. return propertyDescriptors; } public Object getPropertyValue(Object name) { if (name.equals(PROPERTY_FONT)) return strFont; if (name.equals(PROPERTY_SIZE)) return new SizePropertySource(element,ptSize); if (name.equals(PROPERTY_TEXT)) return strText; return null; } public void setPropertyValue(Object name, Object value) { firePropertyChanged((String)name,value); if (name.equals(PROPERTY_FONT)) { strFont = (String)value; return; } if (name.equals(PROPERTY_TEXT)) { strText = (String)value; return; } if (name.equals(PROPERTY_SIZE)) { SizePropertySource sizeProp = (SizePropertySource)value; ptSize = sizeProp.getValue(); } }
如果只希望查看属性值,该属性的Descriptor则使用PropertyDescriptor即可。PropertyDescriptor#createPropertyEditor返回为null,即不可编辑。
(通过Properties改变模型了,怎么通知视图呢? 请点击这里)
3、适配IPropertySource对象;
· 方式1> 模型对象同时实现IAdaptable接口;
public class ButtonElement implements IWorkbenchAdapter,IAdaptable { public Object getAdapter(Class adapter) { if (adapter == IWorkbenchAdapter.class) return this; if (adapter == IPropertySource.class) return new ButtonElementProperties(this); return null; }
· 方式2> 添加org.eclipse.core.runtime.adapters扩展点并实现IAdapterFactory.[r3]
if (adapterType== IPropertySource.class && adaptableObject instanceof Todo){
return new ButtonElementProperties((ButtonElement) adaptableObject);
}
return null;
}
4、如果希望能分门别类,可以按照下面的方式来实现嵌套(PropertySource->PropertySource->...->PropertyDescriptor,如SizePropertySource; 源码来自[r1])
public Object getPropertyValue(Object name) { if (name.equals(PROPERTY_FONT)) return strFont; if (name.equals(PROPERTY_SIZE)) return new SizePropertySource(element,ptSize); if (name.equals(PROPERTY_TEXT)) return strText; return null; }
public void setPropertyValue(Object name, Object value) { firePropertyChanged((String)name,value); if (name.equals(PROPERTY_FONT)) { strFont = (String)value; return; } if (name.equals(PROPERTY_TEXT)) { strText = (String)value; return; } if (name.equals(PROPERTY_SIZE)) { SizePropertySource sizeProp = (SizePropertySource)value; ptSize = sizeProp.getValue(); } }
源码:
https://github.com/winse/hello/tree/8d4a64333b9a637ad07a33dd2947a17bb5207280
参考:
r1:Eclipse官网的《Properties如何使用》
http://www.eclipse.org/articles/Article-Properties-View/properties-view.html
r2:自定义tabbed properties参考资料:
http://www.eclipse.org/articles/Article-Tabbed-Properties/tabbed_properties_view.html
http://www.ibm.com/developerworks/cn/opensource/os-cn-eclipse-tabview/index.html
http://hi.baidu.com/uvfluhpkkjfglor/item/5526fd459565ec14886d1071
r3:FactoryAdapter实现
http://www.vogella.com/articles/EclipsePlugIn/article.html # 7. Adapters
相关推荐
1.2.2 Toolbox和Properties窗口 1.2.3 动态帮助窗口 1.2.4 类现图 1.2.5 对象浏览器 1.2.6 代码编辑器 1.3 事件处理 1.3.1 使用消息框 1.3.2 使用IntelliSense 1.4 小结 第2章 简单用户界面控件 2.1 用户界面设计...
-- 指定Web应用的默认编码集,相当于调用HttpServletRequest的setCharacterEncoding方法 --> <constant name="struts.i18n.encoding" value="UTF-8" /> <!-- 该属性指定需要Struts 2处理的请求后缀,该属性的...
第13章 SWT的高级应用.. 262 13.1 打印支持 262 13.1.1 打印类(Printer)和打印数据类(PrinterData) 262 13.1.2 打印程序示例概述 265 13.1.3 打印程序示例:主窗口程序 265 13.1.4 打印程序示例:打开...
Windows 应用高级编程--C#编程篇 作者:〔美〕杰汉森,〔美〕雷诺德 著,张哲峰 译 出版社:清华大学出版社 出版时间:2003年01月 第1章 Windows编程基础 1.1 Windows和窗体 1.1.1 Windows窗体的概念...
如果你只对应用中的某部分感兴趣的话,这个功能非常有用。例如,如果你要在第13次循环的时候检查程 序,或者在一个抽象父类中调试某些功能,而你只关注其 中一个具体的实现。你可以在断点视图中设置条件, 或者...
对于添加您的个人API密钥到local.properties运行/构建应用程序之前。 请添加以下行: API_KEY="<MY>" 已知问题/待办事项/想法 为缺少的网络连接添加视图/提示 布局思路:更改细节视图以用背景图像填充整个背景,并...
组件树视图:显示应用程序的组件层次结构,允许开发者查看每个组件的状态(props、data、computed properties、Vuex状态等)以及它们的生命周期钩子。 事件监听器:展示组件上绑定的事件监听器及其回调函数,便于...
除了这些甜蜜的优点之外,您还可以获得仅将ApexCharts.JS包含在ruby应用程序中无法获得的其他功能,即用于创建图表的视图/模板助手,选项快捷方式,应用程序范围的默认选项,可重用的自定义主题调色板等。...
官方iFixit Android App v2.9.2 此应用是iFixit网站的本机Android版本,其中包括: 设备层次结构浏览设备的答案和指南列表指南视图查看和添加指南注释媒体管理器集成:查看和上传图像收藏夹,精选专辑和拆解指南列表...
(1)在程序中选择ResourceView视图,打开“Dialog”节点下的“IDD_AFFAIR_DIALOG”对话框资源,右键单击ADO Data控件,在弹出的菜单中选择Properties菜单项,选择通用选项卡,单击“生成”按钮,在连接选项卡中...
2、根据mi-cms\src\main\resources\properties\jdbc.properties 配置数据库 3、先自己创建数据库mi-cms,导入数据库文件: mi-cms/sql/mi-cms.sql 4、用Tomcat等服务器运行mi-cms 5、后台管理系统(CMS),账号:...
并将其添加到您的local.properties,例如sdk.dir = YOUR_LOCAL_PATH_TO_ANDROID_SDK api.news = ADD_YOUR_API_KEY_HERE体系结构此应用程序使用MVVM(模型视图视图模型)架构。 屏幕快照主页屏幕搜索屏幕保存的文章...
iiCnma 一个游乐场的Android应用程序,使用API展示了最新的技术和体系结构模式。...克隆存储库,然后从电影数据库中获取,然后将其放入local.properties文件中,如下所示: apikey = " YOUR_API_KEY
本项目是基于ASP.NET ...该系统采用ASP.NET Core全栈、Blazor视图、Session鉴权、Autofac依赖注入、SQL Server数据库和三层架构搭建。项目结构清晰,代码注释详尽,适合用于学习和研究C#在图书管理系统开发中的应用。
- HTML页面:42个.html文件,构成了应用的视图层 - 属性配置:22个.properties文件,用于管理系统配置 - 样式表:22个.css文件,定义了整体界面风格 - 版本控制忽略配置:14个.gitignore文件,用于管理Git版本...
当进入 C/C++ Projects 视图,选择您的项目,单击鼠标右键并在 Build Settings 选项卡上选择 Properties 之后,就可以使用更多的用于构建项目的常用选项。这些选项主要影响因遇到编译错误而使构建停止时所发生的情况...
热门电影计划(第2阶段)概述该项目是Udacity Android Developer Nanodegree的一部分。... 要运行此应用,您必须从MovieDB网站获得免费的API密钥,并将以下代码行添加到gradle.properties文件中: API_
Java开发Web应用程序时用到的技术主要有两种,即Servlet和JSP,Servlet是在服务器端执行的Java程序,一个被称为Servlet容器的程序(其实就是服务器) 负责执行Java程序,而JSP(Java Server Page)则是一个页面, 由...