Java的WPF替代方案是什么?

45
我目前主要从事 .Net 技术,但最近也在尝试 Java 技术——探索其中的新知识。
现在我正在寻找 Java 中相当于 WPF 的技术。我知道可能会有一两个 OpenGL 库可以用,但它们并不像 WPF 系统那样丰富和简单。
3个回答

37

我认为JavaFX、Swing、Java2D以及基于浏览器的JRE结合起来,就是WPF提供的解决方案:

  • JavaFX 应用程序(实际上是任何Java应用程序)可以在浏览器或桌面上运行
  • JavaFX 提供高端视频支持
  • JavaFX 提供脚本动画和视觉特效
  • Swing 提供UI能力,并且可以在Java和JavaFX中使用
  • Java2D 为所有绘图任务(包括Swing)提供底层支持,利用了硬件加速和DirectX支持
  • 桌面上或浏览器上的JRE使得Java应用程序可以部署到多个环境中(包括其他屏幕,如机顶盒或手机)

2
没有真正的3D支持,特别是在DirectX HLSL和OpenGL SL中发现的着色器语言。此外,任何当前的JavaFX IDE支持都无法与Expression Blend XAML设计师和Visual Studio 2008以及Visual Studio 2010 Cider(Visual Studio中的WPF设计师)的功能相匹配。 - Eriawan Kusumawardhono
4
它是否能够顺畅地处理数据绑定? - Jason Ridge
3
他们中的任何一个都提供了 WPF 模板的答案吗? - MasterMastic

21

我曾经编写过 Aqua、Macintosh Quick Draw、Windows GDI 和 GDI+、Qt 以及 .NET Winforms,而 WPF 是我使用过的最复杂的 API。虽然它拥有比之前的技术(如 swing)更出色的功能集,但与 WPF 相比仍然不可匹敌。它解决了一些困扰图形编程的主要问题。如果你来自 HTML/JS 的世界,学习起来很容易,但如果你来自传统的图形编程世界,这将是一个重大的范式转变。但无论如何,它比 CSS/HTML/JS 更容易学习。它完全摆脱了其他图形编程环境中的旧概念。

WPF 最大的优点在于它是分辨率独立的。它可以跨设备进行缩放,几乎不需要修改就能够在高分辨率打印机上输出屏幕版本的绘图,并且不会失去分辨率。

它还支持事件触发。UI 元素可以响应其他 UI 元素或您的应用程序代码的事件,从而实现动态界面。它使得代码和 UI 的分离变得轻而易举,即使是 HTML/JS 也难以达到这种效果。元素可以广播和监听事件,并做出相应的响应。

另一个优点是它高度面向对象和声明能力强的 API。使用 XAML,您可以轻松快速地构建一个工作界面,只需几行代码即可完成。与 HTML/JS 不同,它更易学习,输出结果更加可预测和高效。您甚至可以完全使用代码编写 WPF,但通常不值得这样做,因为性能提升微不足道。更好的方法是将您的 Xaml 编译成 .NET 代码。

此外,与 JavaFX 相比,WPF 可用的工具非常广泛。有各种各样的工具包括 Expression Blend 可供使用。还有许多将矢量图形格式(如 SVG 和 Adobe Illustrator)转换为 XAML 的工具。现在,设计师和程序员可以以一种之前很难实现的方式进行桌面出版物的协作。

总之,WPF非常全面,以至于Mono团队选择不将其移植到Mono代码库中。他们声称,要完全实现合理的功能集需要花费很多年的人力。如果存在与Mono兼容的WPF版本,则会使.NET成为事实上的跨平台应用程序框架。实际上,它甚至可能取代HTML/CSS,因为它更加强大且易于理解。不幸的是,微软并没有看到跨平台启用WPF的商业案例。这就是为什么SilverLight/WPF输给了HTML5/JS。由于这个错误,他们现在被迫把不仅是网络而且部分桌面交给HTML 5/JS。


1
感谢您的详细回复! - Vova
1
微软犯了一个大错误。 - TheMentor
2
WPF只适合于高智商的大师,不适合像我这样平均智商的人。是时候转向开源了。 - AnjumSKhan

20

就功能而言,WPF比JavaFX、Swing、AWT或Java2D更全面。毕竟这是设计目标,将与演示相关的所有内容放在一个库中。 就性能而言,它们差不多,唯一的例外是内存使用,其中Java是一个hungry hog


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接