我有一个关于 java 桌面 GUI 应用程序的非常普遍的问题。
我的经验:在过去的几年里,我开发了许多桌面应用程序,其中一些单独使用 Swing,一些使用 Spring-RCP(这很棒,但我仍然不能只押注于一个已经超过 3 年没有更新的框架) 。我也在看《Valkyrie RCP》,但在我看来,那里也确实没有那么多动静。我还使用 Wicket、Tapestry 以及最近的 JSF2 (Primefaces) 开发了 Web 应用程序。在获得了一些 Web 应用程序的经验后,我感觉 java 桌面 GUI 已经被放弃很久了。当然,我之前没有注意到这一点,但是在开发网络应用程序之后,我确实看到直接比较桌面用户界面编程是多么痛苦和复杂。
我在寻找什么:我在这里没有做任何火箭科学,我最怀念的是构建以下简单布局形式的简单方法
label_a input_a feedbackMessage_a
label_b input_b feedbackMessage_b
....
button_save
这不仅与布局有关,这可能是最小的问题。首先,我正在寻找一种将输入字段的值“绑定”到某种“支持 bean 字段”的方法。另外,我想使用直接反馈,这意味着如果 input_a 验证失败,我希望在 FeedbackMessage_a 处显示一条消息,而不是在其他地方显示消息。第三,我想使用 JSR-303 验证和直接反馈。
如果我深入研究典型桌面应用程序的源代码,我通常会看到每个按钮都有一个巨大的动作监听器,其中所有的值分配、验证和反馈消息创建都是手动编写的。将此与 Tapestry 或 jsf2 等 Web 框架进行比较。您要做的就是使用某种表达式语言将输入字段“绑定”到变量/字段,就是这样。该值正在被验证(例如使用 JSR-303 注释)并且(如果所有值都有效)自动传递到支持 bean 的绑定字段中。此外,如果发生验证错误,则会创建一条验证消息,其中输入字段的 id 用于标识负责的输入字段。如果该特定 ID 存在消息组件,则验证消息将在那里设置。一切顺利且合乎逻辑。
现在跳回桌面 GUI;要拥有一个可比较的用户界面,例如具有 20 个输入字段的表单,我可能需要 500 行侦听器代码,其中我首先自己读取每个文本字段的值,自己验证它,然后自己将其写入相应的变量中。如果我要使用 JSR-303,我可以自己调用验证器,但是回溯到相应的输入字段并在那里设置反馈消息会很痛苦......猜猜看......我自己!很痛苦,不是吗?
我的问题:有什么办法可以缓解疼痛吗?如何开发现代桌面应用程序?您使用什么框架以及为什么?是否有可能使用类似于 webframeworks 的绑定方式?我如何实现“直接反馈”,如上所述?我是否错过了这里的火车,或者在过去几年中编写 Web 应用程序真的变得更加简单,而 java-desktop 似乎陷入了困境? (JavaFx 除外,但这对我没有一点帮助)
最后的话不要误会我的意思,我是 Java 桌面应用程序的忠实粉丝。在像我工作的这样一家中等规模的公司中,具有同质环境(所有客户端都安装了相同的 java 版本等),我真的看不到 Web 应用程序的好处。使用 webstart,应用程序启动速度非常快(当然是在第一次启动下载之后)。
在我看来,虽然 Java 中以前端为中心的 Web 框架以光速向前发展,但 java-desktop 几乎没有任何进展。
虽然我可以接受现状,但我真的不得不问这个问题。