我有一个关于 java desktop-gui-applications 的非常普遍的问题。
我的经验: 在过去的几年里,我开发了一些桌面应用程序,一些单独使用 Swing,一些 Spring-RCP(这很棒,但我仍然不能只押注一个没有看到超过 3 次更新的框架多年了)。我也在看 Valkyrie RCP,但在我看来,那里也没有太多动静。我还使用 Wicket、Tapestry 以及最近使用 JSF2(Primefaces)开发了 Web 应用程序。在 Web 应用程序方面获得了一些经验后,我觉得 java desktop-gui 很久以前就被抛弃了。当然我之前没有注意到,但是在开发web-apps之后,我真的看到了直接比较桌面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 几乎根本没有移动。虽然我可以接受现在的方式,但我真的不得不问这个问题。