【问题标题】:Composite pattern in SwingSwing 中的复合模式
【发布时间】:2010-10-13 23:41:09
【问题描述】:

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

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

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

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

我基本上是在寻找其他人使用的粗略指南;我显然想处理某种形式的 JComponent,以便在构建 GUI 时更容易处理,但是不知何故,为了放置胶水代码而扩展最顶层的组件(在本例中为 JScrollPane)感觉不太合适。

【问题讨论】:

    标签: java design-patterns swing composite


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我为专有的 Swing 应用程序使用了一个单独的并行类层次结构,其中一个“组件”类包装了一个或多个 JComponents。我需要一个基类来做很多常见的事情(例如,从 XML 文件设置属性),所以扩展 JComponent 不是一种选择。

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

      设置起来需要一些努力,但是一旦你有了基本的设施,添加新的小部件就很容易了。

      【讨论】:

      • 如果你不扩展 JComponent,你扩展(或不扩展)什么?如果不是 JComponent,你如何将你的组件放到 GUI 中?
      • @Domchi:我的“组件”只是一个精美的包装器,至少包含一个具体的JComponent 实例。基类定义了JComponent getWidget()(实际上我用<T extends JComponent>泛型化了它),布局管理器和其他一切都一样。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-11
      • 2011-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多