【发布时间】: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