Java 如何组织Swing GUI应用程序?

Java 如何组织Swing GUI应用程序?,java,swing,user-interface,architecture,Java,Swing,User Interface,Architecture,我已经用Swing编写了一些GUI,我知道MVC,但我从来没有找到一个好方法来真正组织我的代码。我想要的是maven为每个新项目引入的文件夹结构。另一个例子是rails,其中MVC是通过文件夹结构自动引入的。有类似的秋千吗 如果有一本书描述更大的Swing应用程序的开发,那也会很好。我找到的都是关于设计指南的书,其中设计指的是应用程序的外观。其他Swing书籍(如O'Reilly)详细描述了所有Swing组件,但是关于全局的信息在哪里呢 有没有swing gui的好例子,您会说“这就是您为swi

我已经用Swing编写了一些GUI,我知道MVC,但我从来没有找到一个好方法来真正组织我的代码。我想要的是maven为每个新项目引入的文件夹结构。另一个例子是rails,其中MVC是通过文件夹结构自动引入的。有类似的秋千吗

如果有一本书描述更大的Swing应用程序的开发,那也会很好。我找到的都是关于设计指南的书,其中设计指的是应用程序的外观。其他Swing书籍(如O'Reilly)详细描述了所有Swing组件,但是关于全局的信息在哪里呢

有没有swing gui的好例子,您会说“这就是您为swing组织代码/文件夹/包的方式!”

编辑:我发现了下面的站点,它描述了在创建GUI时spring的用法。这是一个非常古老的例子,它没有回答我的问题,但它是朝着正确方向迈出的一步。它还提到了SpringRCP,但我不确定它是否是解决方案

EDIT2:我还是没有找到更好的答案。有人知道一个理想结构的开源Swing GUI的例子吗?有人知道描述它的书吗?如果不是针对Swing,那么一般来说可能是针对GUI?

您可以阅读。但是,当我开发更大的Swing应用程序时,我不会像进行web开发时那样组织它们。我只是在功能部分组织Swing应用程序。例如,如果应用程序有四个带有表单和表格的选项卡,我会将一个选项卡中的组件放在一个包中。然后,我通常会得到一些表单和表交互的
AbstractTableModel
的定制实现。该模型保留数据缓存并与数据库通信


在我最新的Swing应用程序中,我曾经简化线程。然后,我让我的所有Swing组件在EDT线程上执行,它们与一个数据访问对象进行通信,该对象是一个自定义参与者。然后我还有一些
TimerTask
,它将数据库中的数据与Internet上的服务进行同步,但它们从未在EDT上运行,它们只与DAO(我的参与者)进行通信。

Web开发迫使您进行某些源和资源布局。Swing应用程序并非如此。在这里,您可以使用最适合您的目标的布局

如果您使用一些IDE,您的工作效率将大大提高。NetBeans是Swing的完美选择。NB对如何存储类提供了一些限制。如果您使用JUnit,则有一个“sourcepackages”文件夹,其中包含Java包和相应JUnit测试类的“testpackages”,我强烈建议您这样做

在使用Hibernate的情况下,必须遵守其约定,构建whatever.entity和whatever.util,并且配置XML文件必须位于“默认包”中

这些包的任何进一步组织都取决于程序员。我用运行整个节目的JFrame制作了一个包。每个逻辑单元都有一个包。有时,我会为AbstractTableModels使用一个包,并将它们放在一起,为ComboBoxModels使用另一个包。没有必要建造更深层次的结构。您可以为按钮使用的图标提供一个单独的包,一个用于声音等。Netbeans为您的应用程序创建可运行的jar文件,其中包括所有必要的文件,包括所需的库jar

这里有一个小例子。除了“th”外,所有软件包的名称都很明显th'是这个应用程序的名称,我有一个JFrame,它承载着这个应用程序。此应用程序使用iReport生成报告。这就是“iReports”包的用途

书中描述了较小的示例,并且更关注Java约定


您可以尝试看看它们为应用程序原型提供的体系结构。

尽管它是Groovy,而不是Java,但我建议您看看它,它是一个“Grails for Swing”

它对使用它构建的所有应用程序强制执行给定的结构(在目录和模式方面,尤其是MVC)

我认为它总体上可以为您提供好的想法,尽管您需要对Java进行一些小的调整

此外,请注意Griffon还支持Java中的应用程序构建,它还可能为此提供“原型”,因此您也可以对此进行检查。

不幸的是(或者幸运的是,这取决于您如何看待它),开发可用于多种数据结构的通用窗格并不容易。M通常与V紧密相关,V通常包含一些C

我倾向于将V窗格和相应的M结构放在同一个包中。您还需要一些中央控制显示器来显示每个窗格。中央控制显示器和窗格之间共享C

现在,如果您的项目中需要更多的结构,您可以高举框架以在某些操作中移动所有C,并让窗格(V)指示下一个M/V应该显示什么。Struts最初是为web应用程序开发的,但是Struts 2现在与HttpServlet分离

我自己也没有尝试过,但我看到了一些好处。您可以在不实际显示屏幕的情况下测试屏幕序列。只需创建窗格实例窗格并使用事件调用侦听方法(鼠标单击等)


只是一个想法。

我已经知道Swing体系结构概述,但它在这方面并没有真正帮助我。然而,您组织软件包的方式似乎是解决这个难题的一部分。如何处理出现在多个选项卡中的组件?我通常将Eclipse与Maven一起用作IDE。不幸的是,Swing甚至fo都没有原型