Swing中的复合图案

时间:2010-10-13 23:41:10

标签: java design-patterns swing composite

这基本上是一个架构问题。

我想在处理Swing组件时实现composite pattern;也就是说,我想将几​​个组件与他们的侦听器和逻辑组合在一个组件后面,以便于处理。

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

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

我基本上在寻找其他人使用的粗略指导方针;我显然想要处理某种形式的JComponent以便在构造GUI时更容易处理,但是不知何故,扩展最顶层的组件(在这个例子中是JScrollPane)只是为了让某个地方放置粘合代码。

2 个答案:

答案 0 :(得分:3)

如果您不需要UI委托,则JComponent的扩展名为fine;如果你这样做,How to Write a Custom Swing Component是一个好的开始。在树状表的特定情况下,您可能需要查看org.netbeans.swing.outline,如此answer中所述。

答案 1 :(得分:1)

对于使用单独且并行的类层次结构的专有swing应用程序,我完成了这一点,其中一个“组件”类包装了一个或多个JComponent。我需要一个基类来执行许多常见的操作(例如,从XML文件设置属性),因此不能选择扩展JComponent

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

设置需要一些努力,但是一旦掌握了基本功能,就可以轻松添加新的小部件。