5

我有一个关于 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 几乎根本没有移动。虽然我可以接受现在的方式,但我真的不得不问这个问题。

4

3 回答 3

5

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

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

表单布局

验证框架

于 2012-02-22T23:56:24.530 回答
4

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

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

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

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

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

希望这可以帮助。

于 2012-02-22T22:38:35.427 回答
3

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

一个很好的介绍是 Fowler 的“Organizing Presentation Logic”。有关实现方式,请参阅http://www.jgoodies.com/downloads/articles-and-presentations/上的“Guter Schreibstil für Swing” 幻灯片是德文的,代码是英文的;-)

于 2012-06-01T08:28:37.020 回答