Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使Swing/JFace/SWT GUI可寻址?_Java_User Interface_Design Patterns_Swing - Fatal编程技术网

Java 如何使Swing/JFace/SWT GUI可寻址?

Java 如何使Swing/JFace/SWT GUI可寻址?,java,user-interface,design-patterns,swing,Java,User Interface,Design Patterns,Swing,我有一个“胖”GUI,它变得相当复杂,我想添加从一个地方到另一个地方的链接,并添加后退/前进按钮以简化导航。在我看来,如果我的应用程序是可寻址的,那么这将更容易:每个组合都可以有它的URI,链接将使用该URI 是否存在适用于此问题的设计模式 我可以看看Firefox或Eclipse的源代码,但这些都是巨大的项目,理解它们需要花费大量的时间,所以我在这里提问。有没有更简单的例子 当然,如果我一开始就构建一个web应用程序会更简单,但我不会很快从头开始重写这个巨大的应用程序。我解决这类问题的方法通常

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

是否存在适用于此问题的设计模式

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


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

我解决这类问题的方法通常包括。简而言之,通过提供一种向相关方发送和接收事件的方法(在本例中为复合),可以减少耦合。这相当容易实现,即使在改装时也是如此。这样,您的事件和参与方就可以在不更改依赖代码的情况下进行更改。

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

在Swing中,您可以使用。您可以让每个“页面”都是一张卡片,并且卡片的名称(在将卡片添加到布局时选择)将与您想要的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

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

到日期的所有答案都假定有一个级别,但想象一下,顶部菜单指向“页面”,然后每个页面都有嵌套的选项卡文件夹。URI需要标识每个页面和选项卡项。