代码之家  ›  专栏  ›  技术社区  ›  user7094

GUI:根据组合框的值更改面板

  •  2
  • user7094  · 技术社区  · 17 年前

    我对GUI设计有一个问题,特别是Java Swing和在表示和模型之间创建清晰的分离。

    我们正在使用 Presentation Model 模式,以实现GUI代码和模型之间的某种程度的分离,但我想不出一种干净的方法来做到这一点,而不会以某种方式模糊责任线。

    你解决这种问题的方法是什么?

    [注:很抱歉问了这么长的问题,希望可以理解,必要时我可以重新表述]

    2 回复  |  直到 17 年前
        1
  •  1
  •   Mario Ortegón    17 年前

    你可以用 Factory Pattern 为您选择的元素创建UI小部件。您还可以使用它根据类型创建验证规则对象。这会给你一些你想要的灵活性。

    IWidget widget = UIFactory.createFor(myObject.getType())
    

    IWidget可以有以下方法:

    validateData()
    refreshData()
    setDataElement(IDataElement element)
    

    这将允许您通用地处理所有UI小部件,但仍然为每种元素类型提供一个特殊的UI小部件。我假设您从表中选择的元素都实现了一个包含getType()方法的ViewModel Element接口。

    我将此解决方案与Eclipse扩展机制结合使用,将新的UI元素插入到我的“基础”解决方案中,以获得可扩展的核心和高度的重用性。您可以通过手动或使用Spring将类型和小部件注入工厂来实现类似的功能。

        2
  •  0
  •   akf    17 年前

    如果你不想走通用的道路,你可以让你的模型保存一个组合框项目的映射->与一起使用的面板名称 CardLayout 。然后,您可以创建自定义面板来编辑每种参考数据类型。更改组合框选择后,您可以将当前状态保存在模型中,请求当前选择的面板名称,准备下一个面板进行显示,然后让CardLayout显示它。