创建图形复杂的Java Swing应用程序的最佳编程过程?

时间:2009-04-07 12:25:09

标签: java user-interface design-patterns swing

我正在开始一个相当复杂的Swing应用程序,该应用程序大量以图形为导向,具有大约1000个独立的jpeg,30多种不同的形式,以及跟踪整个用户交互速率的计时器。

我的问题是从实际编程的角度来看,在我已经为整个项目编写故事板并得到客户批准之后,哪里是开始编程这个大型项目的最佳位置(代码方面)以及什么命令我应该编程元素?

(示例答案:首先开始编写所有必要部分的declare和init语句,然后编写所有方法的骨架版本,然后处理swing设计和布局管理器(gridbag),然后处理事件和监听器)

感谢大家的建议哦,顺便说一下,我真的很喜欢StackOverflow!

6 个答案:

答案 0 :(得分:5)

您正在描述一种“瀑布式”开发方法 - 首先完成某个级别的程序,然后完成下一个级别等。这确实是一种可行的方法,但很多人发现它所谓的tracer bullet方法更好;首先制作功能,然后从中学习,调整所需的内容并继续。如果您正在与客户合作,这将非常有用,因为通过展示原型,您可以获得反馈并避免误解。

答案 1 :(得分:3)

我会拿一本关于TDD的书,即使你不打算编写自动化测试,也会就如何处理你的项目提出很好的建议。

之后,我会选择一个功能,将所有应用程序垂直切片并实现端到端。这应该允许您获得任何基础设施/框架,并发现可能从您的设计中抛出的任何问题。

如果您的客户有空闲时间,请在整个过程中向他们展示每项功能,并确保您所做的每件事都为产品增添了一些价值。

- 编辑

此外,我将介绍使用图形设计器进行屏幕而不是使用GridBagLayout。这只会浪费时间,并且在更换屏幕时很快就会成为维护的噩梦。我个人更喜欢以资源文件类型方式工作的那些,其中屏幕基本上是“编译”的,你只需将其加载到代码中

答案 2 :(得分:2)

我更喜欢编写UI,首先我(使用TDD)编写实现UI行为的后端类,而不依赖于UI的呈现(即没有Swing或任何其他UI库)。之后,我编写了一个带有UI库的精简表示层,其中所有事件处理程序等都委托给UI后端(它们应该只是一行而没有任何逻辑)。这样做的好处是您可以轻松地为UI编写测试,从而可以更轻松地更改和维护UI。有关详细信息,请参阅http://martinfowler.com/eaaDev/ModelViewPresenter.html上的链接。

在更高级别,首先实现将为用户带来最大价值的功能。尝试尽早展示一些内容,以便您可以从用户那里获得反馈并改善UI中的任何缺陷。您可以伪造大部分后台服务(例如数据库和业务规则),以便可以使用UI,即使它还没有真正做任何事情。

答案 3 :(得分:2)

我认为 mad-j 有智慧的话语。

不要专注于'所有'...识别部分/组件/模块并交付它们。然后继续下一个和下一个。这称为Iterative and Incremental Development(对瀑布模型的弱点的回应)!

这也将允许您创建工具和框架,这些工具和框架可以使您的开发更容易,更快捷。

这将允许您尽早向客户展示功能部件。但是一个忠告!您的客户很可能会不断改变其要求,更改GUI,改变主意等等。我看到整个项目由于这些持续的变化而失败。这个问题不再提及,但请注意,它很可能会发生并准备好处理它!

如果您和客户有功能部件,可以立即对其进行测试,而不是测试一个庞大的系统。

通过迭代地完成功能部件,可能允许您使用大多数工具和技术在大多数API上的每一层工作。这样做的好处是它可以让您尽早发现复杂性。正是这些复杂的区域使得以下陈述成为现实:

  

前90%的代码占了   前90%的开发时间。   其余10%的代码帐户   对于其他90%的开发   时间。 - 汤姆卡吉尔

识别,确认和理解这些复杂的领域将使您能够更有效地管理风险并改变您的工作和资源。

祝你好运,

Jeach!

答案 4 :(得分:1)

如Wiggles先生所述,您可能希望了解如何使用UI构建器。

如果你正在考虑编写许多表单,看起来表单数据可以很好地匹配某些javabeans,你可能想要先考虑创建一些框架面板。

如果你可以创建一些简单的基类来处理接线(将字段同步到bean,反之亦然),它将为你节省大量的工作。

您甚至可能想要设置一些基于bean“自动创建”字段的面板。只需传入一个bean,面板就会自行创建。其中的技巧是指定字段的布局,并处理具有固定值,验证等的字段。(可以使用javabean属性编辑器处理固定值 - 请参阅http://javadude.com/articles/propedit/index.html

如果你开始使用Swing(eclipse RCP很好,顺便说一下),你可能想看一下Swing应用程序框架(https://appframework.dev.java.net/)。如果不直接使用它,它可能会给你一些关于如何设置绑定的想法。

希望这有点帮助

答案 5 :(得分:-6)

你真的对Swing有信心吗?从EMF开始,Eclipse RCP更好,更灵活

无论如何使用Swing,首先我将准备一个所有的XSLT模板:公共代码例程和其他常见的公共部分,然后将它们带入抽象和接口类,您使用的ORM模式。

然后我将设计一个通用的UI方案,这个“xslize”也是如此。

毕竟使用ANT XSLT处理器,我将根据您的规范准备完整的构建过程。

P.S。 我在2001年之前为简单的web和swing cruds制作了类似的项目,如果你使用一些特殊的UI设计器,你也可以使用xslt嵌套或编写每个规范,而不会在你的ui原始概念中添加脏代码,所以当我制作/添加删除功能时在所有或单个代码段上,最多30秒完全重建ALL,当然你必须使用许多xslt覆盖/导入“XSLIZE”。