其中fireValueChanged(ValueChangeEvent r_Event)就是调用所有的值监听器,通知当前控件的值已经改变。所以不同的对象编辑器之间都可以使用这个fireValueChanged来进行数据的联动处理。容器布局在build方法中我们简单提到了getLayoutDataBuilder获取布局,这个方法获取的布局类GridLayoutDataBuilder,同样是我们经过封装。
可以看到,在这个类里,我们已经对布局进行了一系列初始的封装,除非有特殊的布局需求,可以调用其中的方法更改布局,其他大部分的场景默认布局已经可以满足。这就是对象属性的基类AbstractPropertyAccessor的核心处理,还有很多方法的封装都是可以根据用户的需要自行定义,当然根据控件有需要的可以再封装一层包含各类监听接口的基类,例如:KeyListener, FocusListener, SelectionListener, ModifyListener等。3.说完了基类,StringPropertyEditor就变得简单了。
值得说一下的就是文本框的绘制方法了。
因为这里用到了文本框的封装,我们来看下文本框的封装。
做的事很简单,将固定样式的Text放入到我们的属性编辑器上,并且增加Modify的监听。除此之外我们还有对其他单个控件的封装。
至此,我们一个属性编辑器就开发完成了。
下面我们看看对象编辑器ObjectEditor的封装。
ObjectEditor
根据对象编辑器和属性编辑器的关系,不难理解,对象编辑器就是对属性编辑器的加载、放置、布局。核心方法build,就是遍历调用属性编辑器的绘制。
这是一个一目了然的方法,对象编辑器中的其他操作方法亦是如此,都是遍历属性编辑器,对属性编辑器的挨个操作。---好了,我们完成了控件的封装,是不是觉得封装方法略多,好麻烦啊,我还是复制复制代码,一个个控件添加好了。But!复杂的封装是一时的,日后便利的开发是永久的!然后你又要问了,那么我们封装好了对象编辑器又如何,我们也放不到Wizard放不到View上啊。