【问题标题】:What is the best Java GUI methodology for ease of maintenance and enhancement?便于维护和增强的最佳 Java GUI 方法是什么?
【发布时间】:2011-07-02 18:29:23
【问题描述】:

我需要有关如何重写 java GUI 的建议。最终目标更容易维护和增强。

我构建的是一个 Java Applet 客户端界面,其行为和行为类似于 Eclipse。开发人员可以在不使用一行代码(拖放)的情况下设计他们的数据输入表单,并定义其属性。这部分很好地解决了。但是,我留下了 40,000 多行代码,很难维护。

每次出现错误或新的增强功能时,我通常无法以更直接的方式进行编程。超过一半的时间,我需要解决这个问题,这会增加代码行数。

考虑:

-Java Web Applet(因为它可以在任何安装了 J2RE 的浏览器上运行)

-在慢速机器上运行

-部署大约 200 个节点并不断增长

我目前遇到的问题:

-听众无处不在。有时在 element.AddListener(new listener..) 内。有时在类之外,可能在另一个包含所有其余侦听器的包中。 问题:将所有侦听器放在另一个包中总是好主意吗?如果是这样的话,我不能用“这个”。得到我需要的参考。

- jtable这对我来说是一个杀手:(我在 @ 987654321上遇到的问题仍然是持续的。想象一下我有3列的JTable。第一列是下拉列表,第二列和第三列是textfield。只要值一个值选择值,请选择。从下拉列表中,我需要基于选择的值,并更新到第二列和第三列。问题是,如果用户单击并很快单击其他行,它将更新到错误的列行。

-目前程序是在单线程的意义上进行编码的。每当用户与服务器端进行 http 连接、读取文件、写入文件等时,我都需要将其设置为异步进程,因此它不会感觉像“程序挂起”。最好的方法是什么?

非常感谢这里的帮助!谢谢!

【问题讨论】:

    标签: java swing user-interface jtable


    【解决方案1】:

    这里有很多问题,我不知道从哪里开始,但我可以同情你一个这个。除非您有一个经验丰富的团队,并且已经经历了 Swing 应用程序开发的痛苦,否则事情很快就会变得失控和无法管理。

    在您冒险重新编写项目之前,我会先定义一些简单的开发标准。像包结构和监听器。我还建议将应用程序拆分为良好的单元测试模块或子项目。

    另外,问问自己是否真的需要重新编写应用程序,还是只需要一些 TLC。作为一名顾问和 IT 主管,我看到开发人员总是想重写应用程序,只是因为他们学到了一些新东西或者认为它达不到标准。当他们来找我并告诉我它是垃圾并且需要重写时,我通常会送他们回来并要求他们提出替代解决方案来重写以及每个解决方案的影响,包括 - 什么都不做。在很多情况下,我们根本没有编写应用程序。

    [更新] 最后,如果你要重写,我会使用Domain Driven DesignMVC 方法。 是的,我说的是用于桌面应用程序的 MVC!。我们在这些方法上取得了巨大的成功。它保持了良好的关注点分离,并使事物易于重用。它还提供了轻松切换表示层的结构。最重要的是,它很容易进行单元测试,任何了解 MVC 的开发人员都可以在不了解细节的情况下了解项目的基础知识。

    我还有一些想法,但我暂时先说这些。 ;)

    【讨论】:

    • 我必须同意你的观点,目前我在这个 Swing 应用程序中面临很多问题。很难控制,当我意识到这一点时,代码行会冲天而起。我想保留所有的侦听器和 bean,因为那是业务逻辑所在。你认为什么是最好的?我不想重写全部。如果你能分享一些经验将是最好的!谢谢!
    • 为我的答案添加了更新。 MVC 方法非常适合组织和构建 Swing 应用程序!
    • 听起来很有希望。谢谢迈克尔!我正在研究如何最好地将当前应用程序重组为 100% MVC 合规性。根据wiki,您能否帮助澄清这一点:“Swing,它使用模型委托模式,其中视图和控制器组合在一起,但模型是分开的”。这是真的吗?
    • 有人建议“SWING 中的 MVC 真的是 MV/C”。这是对的吗?基于“compsci.ca/v3/viewtopic.php?t=11199
    • 是的,我同意 Swing 中的 MVC 确实是 MV/C,并且模型紧密集成在视图中。这使您可以专注于真正推动进步的视图、控制器和域。我还喜欢将我的项目布局类似于 Ruby on Rails 和/或 Groovy on Grails 项目,但将域包含在单独的项目中。
    【解决方案2】:

    为 gui 使用 dsl:

    • swinghtml模板
    • swixml
    • yaml

    还有一些

    这将消除描述侦听器的需要,允许以 dsl 方式绑定

    【讨论】:

    • Err.... 这三个对我来说是陌生的。这些是什么?我做了一个快速的谷歌,但在开发 Java GUI 时它没有意义
    • 我怀疑这些将有助于清理现有的 Swing 代码。显然,问题不在于“视图”,而在于“控制器”(侦听器和操作)。
    • 这将帮助您完全分离 gui 标记和控制器列表。 code.google.com/p/swinghtmltemplate 请参见此处的示例。您可以在没有 panel.add(button, BorderLayout.CENTER) 等的单独位置获得整个表单标记您也可以使用 dsl 附加侦听器,而不是在代码中(忘记 button.addActionListener(...))
    • 有了Swinghtmltemplate,似乎不仅仅是java代码,还有maven、html(我不太喜欢tag)和css。这将导致需要维护更多代码:(。这不是我喜欢做的事情。
    • @PenkovVladimir yaml 是一种用于结构化数据的语言(类似于 XML),因此它可以用于存储 GUI 规范(就像 HTML 对您的 swinghtmltemplate 代码所做的那样),但它不会转换为Swing 布局。您的意思是在列表中提及基于 yaml 的内容吗?
    【解决方案3】:

    为什么不直接重用 eclipse 框架来构建自己的 gui,而不是在 Swing 中从头开始编写呢?

    【讨论】:

    • 在生产中,我有 200 多个节点需要处理。部署并能够在较慢的机器上运行是选择平台的重中之重。我应该更容易强调这一点。谢谢。
    • Eclipse 框架意味着从 Swing 到 SWX。您能解释一下 SWX 将如何提供帮助吗?
    猜你喜欢
    • 1970-01-01
    • 2010-09-30
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 2020-09-21
    相关资源
    最近更新 更多