这基本上是一个架构问题。
我想在处理Swing组件时实现composite pattern;也就是说,我想将几个组件与他们的侦听器和逻辑组合在一个组件后面,以便于处理。
考虑一个简单的目录浏览器;比如说,JScrollPane中的一个JTree,它有一些逻辑,用于在用户扩展JTree节点时处理填充文件名。你会如何实现?
你是否扩展了JScrollPane并在构造函数中添加了JTree等,然后你的应用程序处理了JScrollPaneExtended类?或者你扩展,例如,JPanel或JComponent?或者你在填充JFrame时调用的方法中将所有这些类拼接在一起?或者是其他东西?为什么?
我基本上在寻找其他人使用的粗略指导方针;我显然想要处理某种形式的JComponent以便在构造GUI时更容易处理,但是不知何故,扩展最顶层的组件(在这个例子中是JScrollPane)只是为了让某个地方放置粘合代码。
答案 0 :(得分:3)
如果您不需要UI委托,则JComponent
的扩展名为fine;如果你这样做,How to Write a Custom Swing Component是一个好的开始。在树状表的特定情况下,您可能需要查看org.netbeans.swing.outline
,如此answer中所述。
答案 1 :(得分:1)
对于使用单独且并行的类层次结构的专有swing应用程序,我完成了这一点,其中一个“组件”类包装了一个或多个JComponent
。我需要一个基类来执行许多常见的操作(例如,从XML文件设置属性),因此不能选择扩展JComponent
。
对于像文本字段和按钮这样的简单小部件,我的组件类只包含一个小部件。对于任何可以滚动的内容(表格,列表,面板),我的组件在功能小部件之上有一个JSrollPane
。我还有一个“组”组件,处理一组复选框或单选按钮。
设置需要一些努力,但是一旦掌握了基本功能,就可以轻松添加新的小部件。