【问题标题】:How do you make a Swing/JFace/SWT GUI addressable?如何使 Swing/JFace/SWT GUI 可寻址?
【发布时间】:2008-11-19 16:59:46
【问题描述】:

我有一个“胖”的 GUI,它变得相当复杂,我想添加从一个地方到另一个地方的链接,并添加后退/前进按钮以简化导航。在我看来,如果我的应用程序是可寻址的,这会更容易:每个组合都可以有它的 URI,并且链接将使用该 URI。

有适用于这个问题的设计模式吗?

我可以只看 Firefox 或 Eclipse 的源代码,但这些都是巨大的项目,需要大量时间才能理解它,所以我在这里问。有没有更简单的例子?

当然,如果我首先构建一个网络应用程序会更简单,但我不会很快从头开始重写这个庞大的应用程序。

【问题讨论】:

  • 迄今为止的所有答案都假设有一个级别,但想象一个通向“页面”的顶部菜单,然后每个页面都有嵌套的选项卡文件夹。 URI 需要标识每个页面和标签项。

标签: java user-interface design-patterns swing


【解决方案1】:

我做这种事情的解决方案通常涉及listener pattern。简而言之,您可以通过提供一种向相关方(在本例中为组合)发送和接收事件的方法来减少耦合。这很容易实现,即使在改装时也是如此。这样,您的活动和聚会就可以在不更改依赖代码的情况下进行更改。

【讨论】:

    【解决方案2】:

    您可以构建一个“全局”注册表,将唯一 ID 映射到对象(或者可能是类名)。例如,这些对象可以是 JPanel。当用户点击一个链接或按钮时,一些控制器会被告知要显示的新页面的键。该控制器可以创建该 JPanel 并将其放置在应用程序的框架中。

    【讨论】:

      【解决方案3】:

      我最后的方法包括全局管理器和链接注册。 UI 的每个部分都可以为自己命名并进行注册。全局经理了解每个人,然后使用一些肮脏的工作使这部分可见。后退/前进导航由特殊的撤消/重做管理器进行。每个“显示”都能够获取导航管理器并注册其“撤消”事件。让它工作起来很辛苦,但最终的功能非常有用。我们讨论了使用一些简单的 JNDI 服务来定位和命名 UI 部件。它在链接中也可能有用。

      【讨论】:

        【解决方案4】:

        在 Swing 中,您可以使用 CardLayout。您可以让每个“页面”成为一张卡片,卡片的名称(在向布局中添加卡片时选择)将等同于您想要的 URI。

        例子:

        String PAGE_1_KEY = "page 1";
        String PAGE_2_KEY = "page 2";
        // as many keys as you need
        
        JFrame frame = ...;
        frame.setLayout(new CardLayout());
        frame.add(createPage1(), PAGE_1_KEY);
        frame.add(createPage2(), PAGE_2_KEY);
        // etc.
        

        然后在按钮的动作监听器中,你会调用

        ((CardLayout)frame.getLayout()).show(frame, PAGE_1_KEY); // or whichever
        

        【讨论】:

          猜你喜欢
          • 2010-12-17
          • 2011-07-31
          • 2012-09-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多