我目前主要是一个.Net人,但我最近一直在玩Java - 探索那里有什么.
现在我正在寻找WPF的Java等价物.我知道我可以找到一个或两个OpenGL库,但这并不像WPF系统那么丰富或简单.
我认为JavaFX,Swing,Java2D和Java基于浏览器的JRE的组合构成了WPF提供的解决方案:
JavaFX应用程序(实际上,任何Java应用程序)都可以在浏览器或桌面上运行
JavaFX提供高端视频支持
JavaFX提供脚本动画和视觉特效
Swing提供UI功能,可以在Java和JavaFX中使用
Java2D为所有绘图任务(包括Swing)提供基础,利用硬件加速和DirectX支持
桌面或浏览器上的JRE支持将Java应用程序部署到多个环境(包括其他屏幕,如机顶盒或电话)
功能方面的WPF比任何JavaFX,Swing,AWT或Java2D都更全面.毕竟,这是设计目标,将与演示相关的所有内容整合到一个库中.在性能方面,除了Java是饥饿的内存使用情况之外,它们大致相同
我编写了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.