XML文件配置，整个设计遵守开闭原则
<!------------------------------ 设计模式 ------------------------------------->
单例模式：
工厂模式：
观察者模式：监听器
模板模式：bean和editor
适配器模式：

策略模式：
职责链模式：
命令模式：
组合模式：

<!------------------------------- 通用属性面板流程 ----------------------------->
XML配置——>bean定义——>

<!------------------------------ bean规范 ---------------------------->
1、当前propsheet与ctrl-ext中的只是界面相像，内部实现完全不同。
        不必实现具体的get/set方法，统一使用commonBean的props属性，所有属性动态配置到该Hashtable中
2、对于大多数的应用时需要直接使用commonBean即可，有复杂的需求才需要去继承扩展commonBean


<!------------------------------- 通用属性属性内容 ----------------------------->
操作相关：
	是否可编辑
	是否可见
校验相关：
	是否必填
	最大值，最小值
	正则校验
事件相关：
	状态改变
<property name="legendPosition">
	...
	<listeners>
		<listener>
			<event source="showLegend" listener="PropertyChangeListener" value="true">	//value为空意味着没有value也fire事件
				<action method="setEnabled" value="false"/>		//value的类型由参数构造
				<action method="setEditable" value="false"/>	
				<action method="setVisible" value="false"/>
				<action method="setValue" value="value1"/>		//支持多个参数吗
			</event>
			<event source="chartType" listener="PropertyChangeListener" value="Radar" action="">
				<>
			</event>
		</listener>
	</listeners>
</property>

动作相关：
		
	


<!------------------------------ properties文件说明 ---------------------------->
//这里要改！com.kingdee.bos.bi.model.propsheet.panel.propsheet.AbstractProperty.getValue()改为null会报这个错
CellEditorAdapter_zh_CN.properties
	msg=输入的公式存在语法错误！
	msgTitle=信息提示
PropertySheetPanel_zh_CN.properties
	category=分类
	details=详细
	sort=排序

<!------------------------- 事件机制的三大要素 --------------------------->
1、event listener：具体的对监听的事件类
当监听到event object产生的时候，调用相应的方法，进行处理

2、event object：事件状态对象
一般作为listener方法的参数出现

3、event source：具体的事件源
如点击一个button，则button就是event source，为使button对某些事件进行响应，需要注册特定的listener给button


<!------------------------- 通用属性事件的设计 --------------------------->
1、KDTable的编辑事件的触发过程
	先是鼠标点击事件触发，mouseClicked事件触发一个startEditing动作
	startEditing动作再来转发到editCellAt动作
	editCellAt先生成一个KDEvent对象，再来fireEditStarting(editEvent)
	这个时候就是自定义事件的执行过程了，过程如下
	遍历KDTEditManager的listener列表，执行KDTEditListener.editStarting(KDEVent)
	每个KDtable拥有一个KDTEditManager编辑管理器
	接下来就是执行匿名类中的editStarting动作了
	

2、事件的定义
	

<!-----------------------------------例子------------------------------------------->
<categories type="chart" version="1.0">
	<category name="basic" caption="基本">
		<property name="name" caption="名称" type="textField">
			<defaultValue>未命名</defaultValue>
			<verifiers notNull="true" length="10">
				<verifier>
					<expression><![CDATA[^[a-zA-Z]\w*$]]></expression>
					<message><![CDATA[只允许输入字母、数字、下划线 且只能以字母开头！]]></message>
				</verifier>
			</verifiers>
			<description><![CDATA[图形组件的名称]]></description>
		</property>
	