如何组织Swing GUI应用程序?

bln*_*tom 51 java architecture user-interface swing

我已经写了几GUI的使用Swing和我知道MVC,但我从来没有发现真正整理我的代码莫名其妙的好方法.我正在寻找的是像maven为每个新项目引入的文件夹结构.另一个例子是rails,其中MVC是通过文件夹结构自动引入的.Swing有类似的东西吗?

看一本描述更大Swing应用程序开发的书也很高兴.我找到的只是关于设计指南的书籍,其中设计指的是应用程序的外观.其他Swing书籍(如O'Reilly)详细描述了所有挥杆组件,但有关大局的任何信息在哪里?

是否有一个Swing GUI的,在那里你会说什么好榜样"这就是你如何组织代码/文件夹/包摆动!"?

编辑:我发现下面的网站http://www.ibm.com/developerworks/java/tutorials/j-springswing/section7.html描述弹簧的使用,同时创建一个GUI.这是一个相当古老的例子,它没有回答我的问题,但它是迈向正确方向的一步.它还提到了Spring RCP,但我不确定它是不是解决方案.

编辑2:我仍然没有找到更好的答案.有没有人知道开源的理想结构Swing GUI的例子?有人知道一本描述它的书吗?如果不是Swing,那么也许对于GUI来说一般?

jfp*_*ret 12

虽然它是Groovy,而不是Java,但我建议你看看Griffon,这是一个" Grails for Swing ".

它为您使用它构建的所有应用程序强制执行给定的结构(就目录和模式而言,特别是MVC).

我认为它总体上可以给你很好的想法,尽管你必须对Java进行一些改编.

此外,请注意,Griffon还支持使用Java构建应用程序,它也可能为此提供"原型",因此您也可以检查它.

  • 这个答案似乎是我所寻找的最接近的答案,所以赏金是你的.不过,我真的不太满意.我认为,在Swing-Development的这些年里,应该有更常见的最佳实践和更少的黑客攻击.看起来每个人在创建Swing-GUI时都必须重新发明轮子. (3认同)

Jon*_*nas 8

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

在我最新的Swing应用程序中,我使用了Akka actor来简化线程.然后,我在EDT线程上执行了所有Swing组件,并与一个自定义Actor的数据访问对象进行通信.然后,我也有一些TimerTask是从数据库的服务在互联网上同步的数据,但他们从来没有在美国东部时间运行,它们只与DAO,(我的演员)通信.


Cos*_*lis 6

Web开发会强制您使用某些源和资源布局.Swing应用程序不是这种情况.在这里,您可以使用最适合您目标的布局.

如果使用某些IDE,您将获得更高的效率.NetBeans是Swing的完美选择.NB为您提供了如何存储课程的一些限制.如果您使用JUnit,则有一个"Source Packages"文件夹,其中包含Java Packages和相应JUnit测试类的"Test Packages",我强烈建议您这样做.

如果您使用Hibernate,您必须坚持其约定,构建whatever.entity和whatever.util以及配置XML文件需要在"默认包"中.

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

这里有一个小例子.除'th'之外的所有包的名称都非常明显.'th'是这个应用程序的名称,我有在那里托管应用程序的JFrame.此应用程序使用iReport生成报告.这就是'iReports'包的用途.

在此输入图像描述

书籍描述了较小的样本,并且更关注Java约定.

您可以尝试使用Apache Maven,并查看它们随应用程序原型提供的体系结构.

  • 我通常将Eclipse与Maven一起用作IDE.不幸的是,Swing没有原型,甚至一般都没有GUI.但是我找到了以下示例,它至少导致了正确的方向:http://best-practice-software-engineering.ifs.tuwien.ac.at/basic/arch-basic.html (2认同)