`
soulmachine
  • 浏览: 112810 次
  • 性别: Icon_minigender_1
  • 来自: 湖北武汉
社区版块
存档分类
最新评论

UI技术大总结

    博客分类:
  • Java
阅读更多
 

这几天看了好多用户界面的资料,小结一下。主要比较Java 的各种UI技术。

起因是我要用Java 做个UI 出来,虽然以前捣鼓过swing ,但好久不用了,已经生疏了。不知道Java UI 技术现在发展到何种程度了。于是便用google 对常去的站点狂搜一通。经历了痛苦的厚此薄彼的选择后于是便有了此文。

老式的UI我用过的有MFC wxWidgets,现在用过Flex WPF后,对照感太强烈了,便感叹当初学MFC TMD不值了,浪费了那么宝贵的时间结果却一下被微软给淘汰了,而且还留下了一大堆坏的思维习惯。比如MFC 的事件处理是消息-映射模型,现在的事件处理基本上都是类似事件监听模型了,SWT, Swing, Flex, WPF,JSF的事件处理机制都很相似,都是先设计好界面,然后在代码里面写上事件监听器。

目前根据Vista WPF 来看,UI 的趋势是将来界面一定都是以标记语言来描述的,而且桌面应用和Web应用 将统一起来,不再有C/SB/S之分,虽然这在java 界看来遥遥无期,不过Vista 貌似接近了。SF 上也有xml 描述java 界面的项目。

当然,其实用不用xml 描述界面无所谓,重要的是要有好的UI设计器。比如swing 就有netbeans ,在java 中应该算是最好的界面设计器了,而SWT 中最好是SWT Designer 却收费还不好用,自己长得也不怎么样设计的界面也丑,跟Matisse 有天壤之别。现在XAML 就有express blend ,达到了既是XML描述又有好的设计器(虽然它还没有和VS 整合),堪称完美,微软果然是可怕的集团军。

Java 桌面现在声名最响的恐怕就是eclipse SWT 了,各个技术论坛都在谈SWTRCP,不过也有声音说swing 现在性能超过了SWT,而且有文章说Swing 现在已经是GUI 主流工具了,看Swing is dominant GUI tool kit ,而在我看来国内现在大家似乎都在用SWT eclipse rcp,有了蓝色巨人的推广,跟着eclipse 没错。传闻Swing 既丑又慢,而SWT直接原生的操作系统控件, 跟本地操作系统外观一致。看看eclipse 就知道SWT 确实要漂亮,虽然netbeans 5.5 也很漂亮,但还是得承认比不上eclipse。不过有大牛说Swing 丑是因为SUN把它做得默认外观不好,真正的好的UI 还是要自己设计的,你要是真正设计起来其实SWT Swing 没有丑美之分,关键在人的设计。嗯,这话我赞同。 目前还有个难下决断的是如果纯从技术上讲eclipse 的核心和netbeans的核心到底谁的架构好,网上很少有关于eclipse netbeans 核心的资料,eclipse 是基于OSGI标准的,netbeans是基于J2SEMETA-INF/services的,估计二者都一样吧,都是插件体系结构。

综上所述,Java桌面现在的情况是:SWT 默认比Swing 漂亮,不过这在人的设计,平手;SWT没有好的UI 设计器,SwingnetbeansSwing胜出;SWT跨平台性比Swing差,但可以利用操作系统的特性,可能比Swing快一点,Swing绝对WORA,平手; eclipse 已经牢牢占领了市场,SWT RCP的市场需求比Swingnetbeans RCP 要大,这是致命的,SWT胜一大截; SWT 架构不如Swing 优美,其中还有一点类似MFC 消息循环,令人反感,而Swing 则是”MVC 的典范,代码优雅漂亮,平手。

目前eclipse RCP嵌入式版本,e RCP, 对应的,就有嵌入式版本的SWT, eSWT,netbeans似乎还没有嵌入式版本,但是在一篇文章看到预言netbeans 将分成三个版本,其中就包含一个嵌入式版本。

web UIjava 的框架可太多了,我只看中两个:StrutsJSFStruts现在已经成功和webwork整合,不同往日了,而JSF JSR标准,很多厂商都直接支持这两个框架,还真分不出优劣。不过看了flex做的网站我真的觉得这些框架都不理想,界面既不是用XML描述的还做不出什么好效果,即使做出来了也很费劲。国内还有一家公司在做web 版的SWTsmartSWT,想法不错但也有很多无法容忍的弊端。SF上也有SwingS SwingWeb,是用Swing 在服务端描述界面,向客户端浏览器输出HTML界面,但都是小东西,很少人关注。唉,都说J2EE成功,但在Web UI 上怎么就难得有一个让人称心的工具呢?现在有一种思路是用Flex 做客户端,后端用J2EE,我实在不敢恭维,用不同的技术体系做一件事,增加学习成本,而且ActionScript的脚本风格实在不合我的胃口。我更倾向与一个纯java 的解决方案。看来web 界面上java 没什么出彩的东西。

Flex XML 描述界面,后台用actionscript3.0 写后台逻辑,能够实现界面和逻辑完全分离。Flash相信大家都已经认同它的效果吧,Flex 就可以做出和Flash同样炫的效果,要多好看有多好看。Flex Flex Builder 工具,开发起来很方便,而且即将出来的Apollo也很令人期待,所以看来Flex 不经要占领Web 还要占领桌面,很有希望。唯一我不舒服的是ActionSript 3.0 的语法,总是像在写脚本,而不是编程,让人不放心,也许它的语法太灵活我还没有熟练驾驭吧。

WPF Flex 一样,也是用XML描述界面,目前 还只能用C#写后台逻辑,不过WPF有重量级的.net 3.0 部署在客户端,如果Vista 真的普及了,Flash 的末日就到了(估计还可以在手机上占据一席之地)。不过就目前情况看,flash player 远比.net 的普及率高,加上flash 的轻量级和跨平台性,Flex 是目前最实际的RIA方案。

    不管怎样,将来UI 都将用XML 描述,B/S C/S统一,目前.net 快要做到了,Apollo也在努力,唯独还没见Java 有对应的技术,让我们继续期待吧。

    原文链接:http://hi.baidu.com/soulmachine/blog/item/dc04c139c2acc9f33b87cee1.html,欢迎大家给我指点。

3月六号增补:

   swt 真的比swing 快吗?看看Swing为什么能比SWT快?Swing和SWT性能测试比较

       eclipse 用户确实比netbeans 多,那为什么swt 用的人却比swing 少呢?看Swing is dominant GUI tool kit ? SWT 架构不如Swing 是事实,易用性却比Swing 好,上手快,这是我的体验,而且和本地操作系统外观一致,省了我不少功夫。不过有观点说SWT bug 无数,比swing 晚7 年,不成熟。看这篇文章:SWT已经是日薄西山了

      用java 开发大型软件,到底改用  eclipse rcp 还是netbeans rcp?javaeye 上有人说由于eclipse 有GEF 和 EMF ,所以如果开发图形建模工具,用eclipse ,如果开发普通桌面程序,用swing 和netbeas rcp。看来我是要开发普通的,该用netbeans 喽?但是eclipse 有很多开源库可以用,资源很丰富,用netbeans rcp 似乎势单力薄.....

      目前我只用过swing 和JSF,RCP 正打算学,听说做大软件它能省不少功夫。目前eclipse 市场比netbeans 要大,似乎大家学RCP 也都是在eclipse 这边,而我已经习惯了netbeans 和swing ,所以对自己没有信心,想多学点东西,于是现在在观望着eclipse 的东西。希望大家继续给于指点。微软阵营真是太整齐了,最理想的是等vista 普及了,xaml 同时搞定web 和桌面,目前可以选择asp.net +asp.net ajax,wpf/e 将来可以可以作为asp.net 的辅助。将来 WPF 和asp.net + asp.net ajax +wpf/e同时存在。嗯,选择不是很多,没有java 这么痛苦啊


分享到:
评论
31 楼 blu3leaf 2007-03-28  
引用
hexiaodong 写道
swing 虽然控件丰富,但在我看来不是做界面的好选择。主要原因是java语言是静态类型的,用swing 显示实体对象或者对象图的时候,常常需要把你的实体模型转换成swing控件所需要的视图模型,比如要在tree控件显示,你得把对象转换成TreeNode,或者干脆从TreeNode继承;如果要显示在表格中,还得把对象集合转换成TableModule。工作量不小啊。


我们老师教我们都是拿swing来做界面的,转换模版也就是多了2步
工作量还是可以接受的
30 楼 zbird 2007-03-26  
NoName 写道
eclipse的 VE 不好用么?一直想抽时间学点java桌面程序开发呢

感觉和netbeans差太多了。
可能是还不习惯布局管理器,用得我暴郁闷。
netbeans的就好很多,会给你自动选择合适的布局管理器,感觉很好。
29 楼 giscat 2007-03-26  
yuping322 写道
swing太复杂了,用XML描述界面,以后肯定会是主流的。所以把握这一点,swing真正描述画面的逻辑和程序逻辑不分,连VB都不如。Swing好处是提供了一个很好的模型,而且提供了对底层修改的能力。
XAML和flash那个肯定是主流,java开源的也有相关的项目,不过发展的不怎么样。


       swing复杂是复杂的,性能也是有问题地,不过是MVC的典范,
           怎么会描述画面的逻辑和程序逻辑不分呢?
28 楼 NoName 2007-03-26  
eclipse的 VE 不好用么?一直想抽时间学点java桌面程序开发呢
27 楼 lgx522 2007-03-26  
前一阵子试过一下netbeans platform,感觉是很棒的。
26 楼 yuping322 2007-03-25  
swing太复杂了,用XML描述界面,以后肯定会是主流的。所以把握这一点,swing真正描述画面的逻辑和程序逻辑不分,连VB都不如。Swing好处是提供了一个很好的模型,而且提供了对底层修改的能力。
XAML和flash那个肯定是主流,java开源的也有相关的项目,不过发展的不怎么样。
25 楼 jianfeng008cn 2007-03-25  
hexiaodong 写道

[quote="jianfeng008cn]
实体模型到视图模型, 这个转换js也是需要的啊,我觉得这方面的工作量并不大的,有个通用的方案和js应该就没什么区别了,谈论swing和web的js控件不具什么可比性吧

我已经说过了为什么使用js控件的时候可以不必转换实体模型和视图模型。如果你一定要说js也需要的话,你说明原因好么。


你给的例子bindroot方法难道对root的属性、结构等都没有要求?
比如{id:'',name:''}我就这样表示一下意思吧,但是对象实际拥有的可能是code 和 nickname,
每个控件如树啊表啊还是需要特定的datamodel的,要不也就没有树表这样的称谓了,实际的model逻辑上即使符合,也需要做一定的映射,拿dotnet控件来说,即使是通过sql来行成绑定数据至少也得有个表字段到显示字段的映射,拿ext的控件来说也提供了控件需要的datamodel,实际数据的model到控件的datamodel还是需要一个映射的,同样swing的控件也是如此,这并不是语言级别的问题,所以我说了拿swing和web的js控件来做这方面的比较就没什么意义了,如果一定要比也可以看看swing 和ext 在这方面的设计思路。
一直争论的swing和awt 、swt等也从来不是因为java语言的问题,我想
你那段话的意思在我看来,未免有“java不适合做UI ,js适合做UI”,感觉比较怪异,当然也有可能是我对你的意思理解不对。



24 楼 soulmachine 2007-03-25  
cannoulc 要花钱,不开源,根本不值一提。
23 楼 hexiaodong 2007-03-22  
[quote="jianfeng008cn]
实体模型到视图模型, 这个转换js也是需要的啊,我觉得这方面的工作量并不大的,有个通用的方案和js应该就没什么区别了,谈论swing和web的js控件不具什么可比性吧

我已经说过了为什么使用js控件的时候可以不必转换实体模型和视图模型。如果你一定要说js也需要的话,你说明原因好么。
22 楼 wxwdt 2007-03-22  
大家可以看一下canoo的ulc!!
21 楼 giscat 2007-03-21  
swing一定要雄起啊
20 楼 jianfeng008cn 2007-03-21  
hexiaodong 写道
swing 虽然控件丰富,但在我看来不是做界面的好选择。主要原因是java语言是静态类型的,用swing 显示实体对象或者对象图的时候,常常需要把你的实体模型转换成swing控件所需要的视图模型,比如要在tree控件显示,你得把对象转换成TreeNode,或者干脆从TreeNode继承;如果要显示在表格中,还得把对象集合转换成TableModule。工作量不小啊。

但假如用html+js来做界面就不会有这样的问题。js是动态脚本语言,很容易做到控件直接使用实体对象作为控件视图模型。假如显示目录控件,你只需要tree.bindRoot(root),就行了,root可以使任何一个js对象。控件自己会在js对象上织入控件本身所需要的属性。


实体模型到视图模型, 这个转换js也是需要的啊,我觉得这方面的工作量并不大的,有个通用的方案和js应该就没什么区别了,谈论swing和web的js控件不具什么可比性吧

applet的失败也不是java技术的原因啊

web的ui 现在ext好象很不错
19 楼 soulmachine 2007-03-21  
jaxx 的历史太短,一年不到,而且一直是beta ,根本不能放心用
18 楼 xfli333 2007-03-19  
JAXX
17 楼 whisper 2007-03-19  
windows上的事件监听就是消息映射的一个wrapper
学MFC是好事,了解底层永远是最正确的选择
16 楼 azure 2007-03-19  
swing好像没有获得它应有的地位,其实swing very nice,
http://www.blogjava.net/azure
15 楼 hexiaodong 2007-03-16  
假如语言层次就给你解决了这个问题,就不需要反射和复杂的模式了。何乐不为
14 楼 dearwolf 2007-03-16  
hexiaodong 写道
swing 虽然控件丰富,但在我看来不是做界面的好选择。主要原因是java语言是静态类型的,用swing 显示实体对象或者对象图的时候,常常需要把你的实体模型转换成swing控件所需要的视图模型,比如要在tree控件显示,你得把对象转换成TreeNode,或者干脆从TreeNode继承;如果要显示在表格中,还得把对象集合转换成TableModule。工作量不小啊。


所以就要合理应用设计模式以及反射机制了
13 楼 hexiaodong 2007-03-16  
swing 虽然控件丰富,但在我看来不是做界面的好选择。主要原因是java语言是静态类型的,用swing 显示实体对象或者对象图的时候,常常需要把你的实体模型转换成swing控件所需要的视图模型,比如要在tree控件显示,你得把对象转换成TreeNode,或者干脆从TreeNode继承;如果要显示在表格中,还得把对象集合转换成TableModule。工作量不小啊。

但假如用html+js来做界面就不会有这样的问题。js是动态脚本语言,很容易做到控件直接使用实体对象作为控件视图模型。假如显示目录控件,你只需要tree.bindRoot(root),就行了,root可以使任何一个js对象。控件自己会在js对象上织入控件本身所需要的属性。
12 楼 willpower 2007-03-14  
我觉得Nexaweb也很不错的, 不知道你用过没有, 对其进行封装后可以直接以java swing的方式来编写Web UI.

相关推荐

    ui开放技术总结

    总结,UI开放技术基于C语言的实践需要理解并掌握GUI库的使用,遵循设计原则,以及熟练处理用户事件。通过不断学习和实践,开发者可以创建出满足用户需求的高效界面。对于压缩包中的具体内容,需要实际查看才能给出更...

    ui设计试用期工作总结.docx

    只有这样,才能在快速发展的UI设计领域中保持竞争力,为公司创造更大的价值。同时,公司也需要为设计师提供支持,包括提供专业培训、创建有利于创新的环境,以及关注市场趋势,以便更好地满足用户需求,推动产品的...

    jQuery UI以及jQuery easy-ui技术手册

    **jQuery UI技术手册** jQuery UI 是一个基于jQuery库的开源前端框架,用于构建交互式的用户界面。它提供了多种可自定义的组件,如对话框、拖放功能、日期选择器、进度条、滑块等,使得网页开发变得更加简单。...

    J2ME高级UI总结

    **J2ME高级UI总结** Java 2 Micro Edition(J2ME)是Java平台的一个子集,主要用于嵌入式设备和移动设备上的应用程序开发。在J2ME中,UI(用户界面)的设计和实现对于提供良好的用户体验至关重要。本文将深入探讨...

    web(界面UI)测试总结

    ### Web(界面UI)测试总结 #### 一、引言 随着互联网技术的快速发展,Web应用已经成为企业与用户之间互动的重要桥梁。一个优秀的Web应用不仅需要功能完善,更需要具备良好的用户体验。因此,Web测试成为了确保...

    web数据可视化大数据分析领导驾驶舱源码 统计报表UI大屏前端H5页

    标题所提到的"web数据可视化大数据分析领导驾驶舱源码 统计报表UI大屏前端H5页",是针对企业管理者提供的一种高效的数据洞察工具。这个工具利用了Web技术,通过H5页面展示,实现了大屏幕显示的数据分析界面,即所谓...

    Airy UI - Easy UI Animation.zip

    总结来说,Airy UI - Easy UI Animation是Unity2020环境下的一款高效UI动画解决方案,它的出现极大地降低了UI动画的制作难度,提高了开发效率。无论是新手还是经验丰富的开发者,都能从中受益,创造出更加流畅、有...

    精美UI组件:这个项目使用Radix UI和Tailwind CSS构建了一套设计精美的组件 它为开发者提供了一套易于使用的UI

    总结来说,Radix UI和Tailwind CSS是前端开发中的利器,它们结合使用可以极大地提升开发效率和用户体验。通过这个"ui-main"项目,开发者可以获取到一套已经优化的UI组件,这些组件既遵循了现代Web开发的最佳实践,又...

    Jquery的UI库 w2ui

    **jQuery UI库 w2ui详解** jQuery UI是一个强大的...总结,w2ui是一个强大且易用的前端UI库,尤其适合构建管理界面和企业级应用。通过深入学习和实践,开发者可以充分利用其特性,提升Web应用的用户体验和开发效率。

    前端框架amazeui

    总结来说,AmazeUI是一个强大的前端框架,它以响应式布局和丰富的UI组件为核心,注重易用性和可维护性,同时提供了完善的文档支持。无论你是新手还是经验丰富的开发者,都可以利用AmazeUI快速高效地开发出高质量的...

    UI框架的搭建总结

    ### UI框架的搭建总结 #### 一、UI框架概述与目的 UI框架是软件开发过程中用于构建用户界面的一套规则和工具集。它为开发者提供了一种统一的方式来管理和组织应用程序中的用户界面元素,使得界面的设计更加高效且...

    C# 线程访问UI 代理Invoke技术 标准实现

    总结起来,C#中通过代理和`Invoke`技术实现线程访问UI,可以确保多线程环境下的UI操作安全性。这种方法不仅适用于Windows Forms,同样适用于WPF等其他UI框架。在设计多线程应用程序时,理解并正确应用这一技术至关...

    ui设计师工作总结范文_ui设计师工作总结怎么写.docx

    同时,希望通过个人的努力和团队的协作,能在项目中发挥更大的作用,减少个人能力不足给团队带来的影响,力争在技术和项目上取得双重突破。 总结过去,展望未来,UI设计师的工作总结应当全面而深入,要从个人专业...

    懒癌UI,Lanai-UI

    总结来说,Lanai-UI是一个专为管理平台设计的前端UI框架,基于Bootstrap构建,具有高效、易用、响应式的特点,并且拥有丰富的组件和自定义选项。开发者可以通过使用Lanai-UI快速构建出美观且功能齐全的管理界面,...

    Kendo UI 开发教程

    总结来说,Kendo UI是一个功能完备的前端开发框架,它支持开发者构建现代化的Web应用程序。通过Kendo UI,开发者可以利用其众多的UI组件和数据可视化工具,快速开发出交互式强、界面美观的应用程序,并确保在不同...

    Pro_E二次开发中的UI对话框技术

    ### Pro_E二次开发中的UI对话框技术 #### 引言 Pro_E(现已被更新为Creo)是一款由美国参数技术公司(PTC)开发的强大三维CAD/CAM/CAE软件,以其便捷的操作、参数化特征建模以及系统的全相关性而著称。自推出以来...

    《Android UI设计》PDF

    《Android UI设计》面向创建移动应用的产品经理、设计师和开发者,系统讲解了从事Android UI设计必须要掌握的Android平台的主要技术和特性,全面总结了Android UI的设计原理、设计理念和设计模式,并通过一个综合的...

    android UI设计技巧

    总结来说,Android UI设计涉及多方面的知识,包括设计原则、Material Design哲学、Android UI框架的使用、新设计模式的采纳以及图标的恰当设计。只有深入理解并灵活运用这些知识点,才能创造出符合用户需求、美观且...

Global site tag (gtag.js) - Google Analytics