2010-10-13 96 views
2

这基本上是一个建筑问题。Swing中的复合图案

我想实现composite pattern处理Swing组件;也就是说,我想将几​​个组件与其监听器和逻辑组合在一个单一组件中,以便于处理。

考虑一个简单的目录浏览器;比如说,JScrollPane中的一个JTree,其中一些逻辑处理用户扩展JTree节点时填充文件名。你将如何实现?

扩展JScrollPane并在构造函数中添加JTree等,然后您的应用程序处理JScrollPaneExtended类吗?或者你是扩展JPanel还是JComponent?或者,当您填充JFrame时,您是否使用所调用的方法将所有这些类拼接在一起?或者是其他东西?为什么?

我基本上在寻找关于别人使用的粗略指导原则;我显然希望处理某种形式的JComponent,以便在构建GUI时更轻松地进行处理,但是不管怎样,它不适合扩展最顶层的组件(本例中为JScrollPane),只是为了让某处放置胶合代码。

回答

1

我确实做到了对专有的摆动应用使用一个单独的且平行的类层次结构,其中一个“组件”类中封装一个或几个JComponent秒。我需要一个基类来做很多常用的东西(例如,从XML文件设置属性),所以扩展JComponent不是一个选项。

对于简单的小部件,如文本字段和按钮,我的组件类只包含一个小部件。对于可能滚动的任何内容(表,列表,面板),我的组件在功能小部件顶部有一个JSrollPane。我也有一个“组”组件,它处理一组复选框或单选按钮。

这需要一些努力来建立,但一旦你有基本的设施,这是很容易的添加新的组件。

+0

如果你不扩展JComponent,你扩展(或不扩展)是什么?如果不是JComponent,如何将组件放在GUI中? – Domchi 2010-10-14 22:10:40

+0

@Domchi:我的“组件”只是至少一个具体的“JComponent”实例的花哨包装。基类定义了'JComponent getWidget()'(实际上我用''将其泛化),并且布局管理器和其他所有工作都是一样的。 – 2010-10-15 01:50:38