什么是Java的WPF答案?

目前我大多是一个.Net人,但最近我一直在和Java玩 – 探索那里的东西。

现在我正在寻找WPF的Java等价物。 我知道我可以find一个或两个OpenGL库,但这并不像WPF系统那么丰富或简单。

我认为JavaFX,Swing,Java2D和Java的基于浏览器的JRE的组合构成了WPF提供的解决scheme:

  • JavaFX应用程序(实际上是任何Java应用程序)都可以在浏览器或桌面上运行
  • JavaFX提供高端video支持
  • JavaFX提供了脚本animation和视觉特效
  • Swing提供UIfunction,可以在Java和JavaFX中使用
  • 为所有绘图任务(包括Swing)提供基础的Java2D利用了硬件加速和DirectX支持
  • 桌面或浏览器上的JRE使Java应用程序能够部署到多个环境(包括其他屏幕,如机顶盒或电话)

functionWPF比任何JavaFX,Swing,AWT或Java2D更全面。 毕竟,这是devise目标,把与演示文稿相关的所有内容都放在一个单一的库中。 性能方面,它们与Java是一个饥饿的猪的内存使用情况除外

我编写了Aqua,Macintosh Quick Draw,Windows GDI和GDI +,Qt和.NET。Winforms和WPF是迄今为止我使用过的最复杂的API。 虽然它有一个比swing等先进技术更好的function集,但它并不适合WPF。 它解决了困扰graphics编程的一些主要问题。 如果你来自HTML / JS世界,这很容易学习,但如果你来自传统的graphics编程世界,这是一个重大的范式转变。 无论如何,学习CSS / HTML / JS要容易得多。 这与其他graphics编程环境的传统概念相去甚远。

WPF最大的优势在于它独立于分辨率。 它可以跨设备进行扩展,几乎不需要修改。 只需要很less的工作就可以将graphics的屏幕版本输出并将其输出到高分辨率的打印机,而不会造成分辨率的损失。

它也支持事件触发。 UI元素可以响应其他UI元素的事件或应用程序代码,使dynamic接口成为可能。 它可以很容易地将代码从用户界面中分离出来,甚至连HTML / JS都无法实现。 元素可以广播和收听事件并作出相应的响应。

另一个优势是它的高度面向对象和声明能力的API。 使用XAML,您可以通过几行简单快捷地构build工作界面。 与HTML / JS不同,它更容易学习,其输出更具可预测性和效率。 你甚至可以在代码中完全编程WPF,但是一般来说不值得提升性能。 更好的方法是将Xaml编译为.NET代码。

另外,与JavaFX相比,可用于WPF的工具非常广泛。 有大量的工具,包括可用的Expression Blend。 SVG和Adobe Illustrator等vectorgraphics格式也有很多工具,并将它们转换为XAML。 现在,devise师和程序员可以通过以前很难做到的方式在桌面出版方面进行协作。

总之,WPF非常全面,Mono团队select不将其移植到Mono代码库。 他们声称要花费很多年才能完全实现一个合理的function集。 如果存在一个WPF的Mono兼容版本,它将使.NET成为事实上的跨平台应用程序框架。 事实上,它甚至可以取代HTML / CSS,因为它更强大,更容易得到你的头脑。 不幸的是,微软没有看到启用跨平台的WPF的商业案例。 这就是为什么SilverLight / WPF输给HTML5 / JS的原因。 由于这个错误,他们现在不仅要把网站,而且还要把部分桌面交给HTML 5 / JS。