我对java desktop-gui-applications有一个很普遍的问题。
我的经历: 在过去的几年里,我开发了许多桌面应用程序,有些使用Swing单独使用,有些使用Spring-RCP(这很棒,但我不能仅仅打赌一个没有超过3年更新的框架) 。我也在观看Valkyrie RCP,但在我看来,那里也没有那么多的动作。我还使用Wicket,Tapestry以及最近使用JSF2(Primefaces)开发了Web应用程序。在网络应用程序方面获得了一些经验后,我感觉像java desktop-gui很久以前就被抛弃了。当然我之前没有注意到,但是在开发网络应用程序之后,我真的看到桌面用户的编程是多么痛苦和复杂。直接比较。
我在寻找什么: 我这里没有做任何火箭科学,我最想念的是一种简单的方法来构建以下简单布局的形式
label_a input_a feedbackMessage_a
label_b input_b feedbackMessage_b
....
button_save
这不仅仅是关于布局,这可能是最小的问题。首先,我正在寻找一种方法将输入字段的值“绑定”到某种“后备bean字段”。此外,我想使用直接反馈,这意味着如果input_a的验证失败,我想在feedbackMessage_a和其他地方显示一条消息。第三,我希望通过这种直接反馈来使用JSR-303验证。 如果我深入研究典型桌面应用程序的源代码,我通常会看到每个按钮都有一个巨大的动作监听器,其中所有的值分配,验证和反馈消息创建都是手动编写的。将其与tapestry或jsf2等webframework进行比较。你在那里做的是用某种表达式语言将输入字段“绑定”到变量/字段,就是这样。该值将通过验证(例如,使用JSR-303 Annotations)和(如果所有值都有效)自动传递到辅助bean的绑定字段。此外,如果发生验证错误,则创建验证消息,其中inputfield的id用于标识负责的输入字段。如果存在针对该特定id的消息组件,则在那里设置验证消息。这是顺利和合乎逻辑的。
现在跳回桌面gui;有一个类似的用户界面让我们说一个有20个输入字段的表单,我可能需要500行的监听器代码,我首先自己读取每个文本字段的值,自己验证它并自己写在相应的变量中。如果我要使用JSR-303,我可以自己调用验证器,但是回溯到相应的输入字段并在那里设置反馈消息会很痛苦。想知道......我自己!痛苦,不是吗?
我的问题: 有没有办法轻松痛苦?您如何开发现代桌面应用程序?你使用什么框架?为什么?有没有可能像webframeworks那样使用类似的绑定方式呢?我如何实施“直接反馈”,如上所述?我是否错过了这里的火车,或者在过去的几年中编写一个Web应用程序真的变得更加简单,而java-desktop似乎被卡住了? (除了JavaFx,但这对我没有帮助)
最后的话 不要误会我的意思,我是java桌面应用程序的忠实粉丝。在像我工作的中等规模的公司中,在同构环境中(所有客户端都安装了相同的java版本等等),我真的看不到Web应用程序的好处。使用webstart,应用程序启动非常快(在第一次开始下载课程后)。 在我看来,虽然Java中以前端为中心的web框架以光速向前发展,但Java桌面几乎完全没有移动。 虽然我可以忍受这种方式,但我真的要问这个问题。
答案 0 :(得分:4)
我建议你看一下Eclipse Scout吗?它基于Java / Eclipse,可在EPL下使用。
Scout主要用于构建业务应用程序。通过将客户端ui模型与实际的ui渲染完全分离,您可以选择使用Eclipse SWT,Swing或Web应用程序运行应用程序(基于Eclipse RAP,这将随Juno版本一起提供)。
关于您对字段验证的问题,我相信您会发现所提供的机制(所需字段的覆盖方法execValidate())可以使用。
请查看我们维基页面上的可用教程。如果您需要仅客户端解决方案(没有支持服务器),也请考虑此howto。
有关Eclipse Scout的问题,请使用项目论坛。
希望这有帮助。
答案 1 :(得分:4)
我听到了使用JGoodies验证框架的用户的良好反馈,即使与他们的FormLayout
结合使用,顾名思义,这是LayoutManager
专门用于使组件看起来像表单的FormLayout
。
我个人只有FormLayout
和内部开发的绑定框架的经验,其中您描述的UI的创建归结为每个标签编辑器组合的单行。
肯定有图书馆可以提供给你,但我没有经验,所以没有在这方面的建议。
答案 2 :(得分:3)
通过遵循流行且成功的桌面模式以及干净的实现风格,您可以减轻痛苦。我强烈建议您学习模型 - 视图 - 演示者(MVP)模式和演示模型。
好的介绍是福勒的“组织演示逻辑”。有关实施方式,请参阅http://www.jgoodies.com/downloads/articles-and-presentations/中的“GuterSchreibstilfürSwing”幻灯片为德语,代码为英语; - )