我有一个“胖”的GUI,它变得相当复杂,我想添加从一个地方到另一个地方的链接,并添加后退/前进按钮以方便导航。在我看来,如果我的应用程序是可寻址的,这将更容易:每个复合都可以有它的URI,链接将使用该URI。
是否有适用于此问题的设计模式?
我可以看看Firefox或Eclipse的源代码,但这些都是巨大的项目,需要花费大量时间来理解它,所以我在这里问。在某处有一个更简单的例子吗?
当然,如果我首先构建一个Web应用程序会更简单,但我不会很快从头开始重写这个巨大的应用程序。
答案 0 :(得分:1)
我做这样的事情的解决方案通常涉及listener pattern。简而言之,您通过提供一种向感兴趣的各方发送和接收事件的方式来减少耦合(在这种情况下是复合材料)。即使在改装时,这也很容易实现。这样,您的事件和参与方可以在不更改相关代码的情况下进行更改。
答案 1 :(得分:1)
您可以构建一个“全局”注册表,将唯一ID映射到对象(或类名)。例如,这些对象可以是JPanel。当用户单击链接或按钮时,将向某些Controller通知要显示的新页面的键。该Controller可以创建该JPanel并将其放在应用程序的框架中。
答案 2 :(得分:1)
我的最后一种方法包括全球经理和链接注册。 UI的每个部分都能够为自己命名并注册。全局经理知道每一个,然后使用一些肮脏的工作来使这部分可见。后退/前进导航由特殊的撤消/重做管理器完成。每个“显示器”都能够获得导航管理器并注册其“撤消”事件。让它工作很辛苦,但最终的功能非常有用。我们讨论了使用一些简单的JNDI服务来定位和命名UI部分。它也可能在链接中很有用。
答案 3 :(得分:0)
在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