【问题标题】:Swing desktop-developmentSwing 桌面开发
【发布时间】:2012-03-12 15:26:09
【问题描述】:

我有一个关于 java desktop-gui-applications 的非常普遍的问题。

我的经验: 在过去的几年里,我开发了许多桌面应用程序,一些单独使用 Swing,一些 Spring-RCP(这很棒,我仍然不能只押注一个已经 3 年多没有更新的框架) .我也在看 Valkyrie RCP,但在我看来,那里也没有太多动静。我还使用 Wicket、Tapestry 以及最近使用 JSF2(Primefaces)开发了 Web 应用程序。在获得了一些 web 应用程序的经验后,我觉得 java desktop-gui 很久以前就被抛弃了。之前当然没有注意到,但是在开发了web-apps之后,直接对比下,我才真正看到了desktop-uis编程是多么的痛苦和复杂。

我在寻找什么: 我在这里没有做任何火箭科学,我最怀念的是一种简单的方法来构建以下简单布局的表单

label_a    input_a    feedbackMessage_a
label_b    input_b    feedbackMessage_b
....
button_save

这不仅仅是布局问题,这可能是最小的问题。首先,我正在寻找一种将输入字段的值“绑定”到某种“支持豆字段”的方法。我还想使用直接反馈,这意味着如果 input_a 验证失败,我希望在 feedbackMessage_a 上显示一条消息,而别处。第三,我想通过这种直接反馈来使用 JSR-303 验证。 如果我深入研究典型桌面应用程序的源代码,我通常会看到每个按钮都有一个巨大的动作侦听器,其中所有的值分配、验证和反馈消息创建都是手动编写的。将此与 Tapestry 或 jsf2 等网络框架进行比较。您将在那里做的是将输入字段“绑定”到具有某种表达式语言的变量/字段,就是这样。该值正在得到验证(例如,使用 JSR-303 注释)并且(如果所有值都有效)自动传递到支持 bean 的绑定字段。此外,如果发生验证错误,则会创建一条验证消息,其中输入字段的 id 用于标识负责的输入字段。如果该特定 id 存在消息组件,则在此处设置验证消息。它既流畅又合乎逻辑。

现在跳回桌面 gui;为了有一个可比较的用户界面,比如说一个有 20 个输入字段的表单,我可能需要 500 行监听器代码,我首先自己读取每个文本字段的值,自己验证它并自己将其写入相应的变量中.如果我要使用 JSR-303,我可以自己调用验证器,但是回溯到相应的输入字段并在那里设置反馈消息会很痛苦......猜猜是什么......我自己!很痛苦,不是吗?

我的问题: 有什么方法可以减轻疼痛吗?您如何开发现代桌面应用程序?你使用什么框架,为什么?是否有可能使用类似 webframeworks 的绑定方式?如上所述,我如何实现“直接反馈”?我在这里错过了一趟火车,还是在过去几年中编写 Web 应用程序真的变得简单多了,而 java-desktop 似乎被卡住了? (JavaFx 除外,但这对我没有一点帮助)

最后的话 不要误会我的意思,我是 Java 桌面应用程序的忠实粉丝。在像我这样工作的中型公司中,具有同质环境(所有客户端都安装了相同的 java 版本等),我真的看不到 Web 应用程序的好处。使用 webstart,应用程序启动得非常快(当然是在第一次启动之后)。 在我看来,尽管 Java 中以前端为中心的 web 框架以光速向前发展,但 java-desktop 几乎完全没有移动。 虽然我可以接受现在的生活,但我真的不得不问这个问题。

【问题讨论】:

  • 我完全同意你最后的话,我今天看到(并且正在开发)只在 Intranet 中运行的 Web 应用程序,牺牲客户端的能力到浏览器的窗口边界并没有真正的好处。我将 .NET 用于客户端/服务器应用程序,那里有一个很好的字段验证范例,但我不知道 Java 是否有类似的东西。
  • 感谢您的链接。现在我看到这段代码,我意识到 Spring-RCP(我经常使用它)似乎是建立在 JGoodies-Form 上的。我会试一试
  • java desktop-gui 并没有被放弃,它只是转移到 Eclipse RCP 中,因为基于纯 java/Swing 的技术似乎放弃了。实现 Eclipse RCP 应用程序的方法有很多种,其中一些涉及 500 行侦听器代码 :) 其他一些方法只是为 GUI 创建模型并要求工具链为您生成代码。

标签: swing jgoodies spring-rcp


【解决方案1】:

我从使用 JGoodies 验证框架的用户那里听到了很好的反馈,甚至与他们的 FormLayout 结合使用,顾名思义,LayoutManager 是专门为使组件看起来像表单而设计的。

我个人只有FormLayout 和内部开发的绑定框架的经验,您所描述的 UI 的创建归结为每个标签编辑器组合的单行。 当然有一些可用的库可以为您提供这些,但我没有使用它们的经验,因此在这方面没有任何建议。

表单布局

验证框架

【讨论】:

  • 感谢您的提示。我使用 JGoodies-form 和 -binding 为我实现了一个概念验证,效果很好。但是,我没有发现 JGoodies-validation 对我的案例有太大帮助。反正我不需要即时验证,所以我只是在我的保存操作中自己调用 HibernateValidators validate() 。每个输入组件都有第二个 JLabel 用于验证。我正在使用 HashMap 从属性名称(我为每个验证错误从 HibernateValidator 获取)回溯到相应的 JLabel。谢谢
【解决方案2】:

我可以建议看看Eclipse Scout吗?它基于 Java/Eclipse,可在 EPL 下使用。

Scout 主要致力于构建业务应用程序。通过将客户端 ui 模型与实际 ui 渲染完全分离,您可以选择使用 Eclipse SWT、Swing 或 Web 应用程序运行您的应用程序(基于 Eclipse RAP,这将与 Juno 版本一起提供)。

关于您对字段验证的问题,我相信您会发现所提供的机制(覆盖所需字段的方法 execValidate())使用起来很舒服。

请查看我们 wiki 页面上的可用教程。如果您需要仅客户端的解决方案(没有支持的服务器),也可以考虑这个howto

有关 Eclipse Scout 的问题,请使用项目论坛。

希望这会有所帮助。

【讨论】:

    【解决方案3】:

    您可以通过遵循流行且成功的桌面模式并结合干净的实施风格来减轻您的痛苦。我强烈建议您学习 Model-View-Presenter (MVP) 模式和 Presentation Model。

    一个很好的介绍是 Fowler 的“组织表示逻辑”。实现方式见http://www.jgoodies.com/downloads/articles-and-presentations/上的“Guter Schreibstil für Swing”幻灯片是德文的,代码是英文的;-)

    【讨论】:

    • 欢迎来到 Stack Overflow!感谢您发布您的答案!请务必仔细阅读FAQ on Self-Promotion。另请注意,每次链接到自己的网站/产品时,都要求发布免责声明。
    猜你喜欢
    • 2011-03-30
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多