现在我正在寻找 Java 中相当于 WPF 的技术。我知道可能会有一两个 OpenGL 库可以用,但它们并不像 WPF 系统那样丰富和简单。
我认为JavaFX、Swing、Java2D以及基于浏览器的JRE结合起来,就是WPF提供的解决方案:
我曾经编写过 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。
就功能而言,WPF比JavaFX、Swing、AWT或Java2D更全面。毕竟这是设计目标,将与演示相关的所有内容放在一个库中。 就性能而言,它们差不多,唯一的例外是内存使用,其中Java是一个hungry hog。