说到GUI类库的重用有一个很著名的模式:Composite模式。对,一个现代面向对象GUI类库基本上都有这个模式的实现,当然也包括swing.不
过早一点如MFC就没有完整的实现,现在来看如果一个GUI类库连基本的Composite模式都没有实现基本上感觉是出土的文物啦!
但是我们来看即便有了Composite模式,但Composite模式通常是构建静态组合,如果要动态的替换一个复合组件内部的子元素如何办呢?如此一来这个组件就只能定义自己的布局形式,而不能定死在这个布局形式内的元素。
其实从用户角度来说一个GUI元素通常就是两种情况要么就是表现,要么就是处于和用户交互状态,这是它们的形态通常不一样。所以组件不仅仅要只定义自己的布局形式,还要给于外部机会来配置当自己的子元素处于这两种状态时相应的UI组件是什么!
swing通过renderer/editor达到了这种灵活性。如swing中JTable,JList,JTree等组件都只是定义了自
己的布局形式。并且都可以配置renderer/editor,这样你的renderer/editor实现就接管了组件里面元素的表现形式和交互形态。
理论上你可以用任何JComponent作为组件里面元素的表现形式和交互形态。其灵活性和重用性达到了一个巅峰!
以前还聊过一个JTable的例子!
http://www.douban.com/group/topic/1112689/