`
xiaozhonghua
  • 浏览: 252737 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
阅读更多

要源代码的朋友:容我再整理数日,但一定会奉上。要下载该框架,并想了解该框架的更多用法,可以看这里:《Swing第二刀:枝间新绿一重重》

 

对Swing的抱怨和批评从来就没有停止过。不过从以前的铺天盖地,到后来的见怪不怪,到现在的冷冷清清。似乎人们早就已经浸淫在无处不在的web和满天飞的RIA之中,懒得去理会Swing这个老古董了。难道Swing真的到了日薄西山、穷途末路的地步?

大家对待Swing的态度从来就不缺乏偏见。作为Java的桌面UI技术,其实它和MFC、VCL、Winform、WPF以及Flex、Silverlight一样,只是做界面的技术工具而已,本身并没有什么不好。只要计算机还用屏幕、键盘、鼠标来进行交互,这些UI技术(或其后续改良继任者)就会始终存在。无论哪个UI技术,说到底都是在屏幕上画图,本质上都是画点、划线而已,只是有的用起来复杂,有的简单,有的功能强,有的功能弱。不过对于技艺高超者来说,给个邮票大的地方也能跳出激动人心的舞蹈,Flex不就是在Flash这块邮票上面不停的折腾么?这又和脚下的空间有多少关系呢?相比Flash/Flex这张小邮票,Swing则给了我们一个巨大的足球场。如果我们还是不能在这个舞台上吸引更多的观众,还是多反思一下自己的舞技吧,就算脚下的场地有点湿滑不平,我们也没必要喋喋不休。

Swing的设计的确有点过于概念化,导致结构比较抽象,对初学者来说确实比较费劲。记得最开始学习Swing时,弄个table还要创建什么TableModel,还有个AbstractTableModel,还有个DefaultTableModel...一头雾水。为什么不是table.addRow(String[] row)就ok么?直到慢慢理解了MVC,理解了更多设计模式,理解了action和listener监听,renderer/editor机制,UI代理、事件派发线程...才慢慢理解和掌握了Swing,编程水平也有了很大提高。而回头再看十年前用VB6写程序,DIM一个ADO、连接ODBC、拖拽一个文本框、设置属性绑定....简直就是工具的奴隶,一点软件设计的内涵也没学到,不客气的说真是害了一代人。

人类能发展在于善用工具。要把各种UI技术比喻成工具刀,Swing是哪类刀呢?有人说Swing连个TreeTable、日期控件都没有,真是原始社会(夸张点吧,怎么也算封建社会吧)!那么Swing就是这样一把刀了?



 
这把刀实在是吓坏了不少人。不过一些痛恨Swing的人会觉得很解气。要说有偏见吧,确实偏见是无处不在的。就像美国人鄙视日本人,日本人鄙视韩国人,韩国人鄙视中国人,中国上海人鄙视北京人,北京人鄙视天津人,天津人鄙视河南人,河南人鄙视新疆人,新疆人鄙视所有人..............扯远了。其实熟悉一段时间Swing后,只要掌握了一些基本的MVC设计思路和常用组件的使用方法,就会发现,这把刀可以很锋利,可以说是“宝刀未老”,而不是”锈迹斑斑“:



 

不过对于很多非常简单的UI任务来说,Swing会显得很啰嗦、很繁琐。API浩如烟海,文档缺乏,一头扎进去半天出不来。我们头大,我们发狂:我要拧一个螺丝而已,你却给我下面这把刀:



 
所以,你家里需要准备一个单独的螺丝刀,用来拧螺丝;准备一把剪刀,用来剪纸张;一个刮胡刀,用来刮胡子;一把菜刀,用来切菜;还要一个指甲刀,用来剪指甲。虽然菜刀也能凑合割指甲,刮胡刀剁饺子馅也没意见(疯了),但是你显然不想这么做。所以,别抱怨Flex这把剪刀功能不够强,Silverlight这个螺丝刀功能不够多,Swing太复杂。作为Java平台的厂商,Sun除了推出Swing这样的全功能工具刀,还能如何呢?现实世界需求很复杂,只能尽量全满足。这就是生活。




 
所以,上战场除了带上冲锋枪,扛上火箭筒的同时,挎上GPS,腿上还要再绑上一把刀。程序员也是一样,多一项技能就是多一项武器,关键时刻一个都不能少,一个武器就多一个生存的机会。



 

工作原因,使用Swing好多年了。我很喜欢Swing。它复杂,它啰嗦,它功能强,它发展慢。不过我还是很喜欢,并在一些项目中使用。慢慢的,积累了一些在项目中使用Swing的经验。不这里先秀一个今天上午还在改的项目界面,希望大家喜欢。

首先说明一下,这是一个免费的ERP产品界面,只是一个原型和Demo,还没有被最终确认。图上面的功能、模块、数据都是假的,大家不要较真。由于ERP软件的模块和产品功能众多、业务逻辑复杂,程序的界面需要体现“友好、方便、易用”的原则。再加上其“免费”的重要特性,这里选择了绿色和灰色为基本色调,以橙色作为主要的辅助色,既不过于死板,也不过于花哨,体现了“绿色、环保、低碳(好像不太搭边哦)”的软件设计理念。



 
上图是ERP软件的主界面。窗口上下分别是菜单和状态栏,左侧是模块树,右侧是快捷功能列表,中间是具体数据和内容的显示区域,用多tab方式显示每个页面。为了考虑到绝大多数用户的屏幕尺寸,这里都以1024*768作为基本尺寸进行设计和抓图。可以看到中间的数据显示区域已经不是很宽裕。所以,程序加了一个功能:双击中间的tab头可以将左右闭合,增大中间内容页面的可见区域,如下图效果。可以看到,左右区域闭合后,还会露出图标以及tooltip文字,不影响继续使用:


 
中间的内容页可以显示任意Swing组件,例如放一些销售业绩图、报表、股票图(ERP里头不管股票吧,懂行的纠正一下下)之类,例如下图:



 
当然在ERP系统中,最多的还是各种枯燥的数据和报表,这时候表格还是最常见和重要的呈现方法。但是放在咱这里,表格也要做的清新、耐看一点,不能太审美疲劳:

或者,查找一下全球供应商或者客户分布及其业务情况:

 


 

好了,先上这几张图。如果大家喜欢,以后再上传更多。


做了很多项目和界面,有几个体会:

  • 界面设计,一定要“美工先行”。也就是美术设计和效果图的设计工作要先于软件开发去做。在美工设计的阶段,大家一定不要考虑技术上的问题,别冲上去第一眼就“哎呦,这个不好搞”,”这个圆角和渐变咋弄?“,这是我们程序员的职业通病。大家是否发现,光靠程序员自己,几乎是无法做出真正好的UI?因为程序设计和艺术设计几乎用不同的大脑部位(具体是前脑后脑左脑右脑我还真没仔细研究),而我们程序员擅长的是逻辑思维,对发散思维的艺术设计则基本都“缺根弦”。比如我们写程序时候,要突出一个数据,我们就直接给设置颜色,先上setColor(Color.red);难看?换setColor(Color.green);靠,还不行?你啰嗦不啊?干脆直接setColor(Color.black)了事。你说,这界面怎么能好看。
  • 严格执行美工的设计。一旦美工设计好了效果图,程序员应当”一个像素不差“的把它实现出来,而不要自作聪明的随意修改,或以”技术上不好搞“为借口退缩。要把界面设计当做艺术品一样对待。记住细节才是成败的关键和真正出彩的地方。上面的抓图,我们都是把运行结果抓图放大后逐个边框圆角甚至像素比对审核,做到"一丝不差",这样才能真正的出设计精品。
  • 把握”以用为本“的原则。软件是艺术,但不是艺术品,光看不碰;软件之本在于用。如果脱离了”易用“和”以用户体验为中心“的设计宗旨,一味的追求华丽、花哨,忽视了用户的使用体验,则容易本末倒置,哗众取宠,结果自然是一败涂地。
  • 统一的风格。软件的整个界面设计要有鲜明的主题,甚至上升到其理念是什么。然后由专业的美工形成具体的色系,规定其使用方法,并体现到每个页面、每个按钮、每个像素中去。


 

相信通过这些手段,我们每个人每个团队都可以制作出高质量的软件界面,让使用者赏心悦目,让开发者心旷神怡,让老板心花怒放,让竞争对手心惊胆战!

后记:

如果大家对以上界面感兴趣,我将在后续文章中介绍本项目的设计思路、功能、实现方法,以及相关源代码。本项目主要用到的第三方的包有JGoodies和TWaver。同时希望通过这一系列文章,能够让大家重新认识Swing这把刀,用好这把刀,一路披荆斩棘、砍瓜切菜、攻城拔寨、再创辉煌!

 

 

  • 大小: 23.6 KB
  • 大小: 54 KB
  • 大小: 34.5 KB
  • 大小: 59.2 KB
  • 大小: 40.5 KB
  • 大小: 245.8 KB
  • 大小: 138.5 KB
  • 大小: 163.7 KB
  • 大小: 205.3 KB
  • 大小: 59.3 KB
  • 大小: 367 KB
分享到:
评论
108 楼 ray_linn 2010-11-11  
xchao 写道
太强了,想想要这各UI界面的布局设计,想不到楼主早就实现出来了,
想问问左侧的模块树那个是自己写的还是用的第三方类库呢?



你傻啊。。。。基本就是twaver的广告。。。
107 楼 k_scott 2010-11-11  
Swing真正拿着用的还是少啊,不过很好!
106 楼 _紫o轩_ 2010-11-11  
看过更觉惭愧啊,swing我只是略微的浏览了一下
105 楼 xchao 2010-11-10  
太强了,想想要这各UI界面的布局设计,想不到楼主早就实现出来了,
想问问左侧的模块树那个是自己写的还是用的第三方类库呢?
104 楼 allskyloveok 2010-10-12  
Swing 的步子已经落后面了,向浏览器进发吧!比如flex
103 楼 dlutzgn 2010-10-12  
楼主的Twaver有License,我运行2个小时就会弹出对话框要求关闭,
楼主能否提供一个没有Licenser的Twaver.jar包?
102 楼 newvirus 2010-10-12  
swing 学习中
101 楼 罗春桉 2010-10-10  
牛!我要好好学习Swing
100 楼 尘土飞扬 2010-07-20  
看了楼主的系列贴,才知道浮躁是我的最大敌人
99 楼 dilantaya 2010-07-13  
恩,但是感觉swing的东西貌似用起来有点延时
98 楼 ninja9turtle 2010-07-01  
javagui 写道
献上我06年做的一款IM,可惜是SWT做的,如果能用Swing的话效果更加。
我不理解桌面时代为什么那么多不了解Swing的人鄙视Swing,我一直看好Swing的高度的自定义组件的能力。可惜未来是移动、甚至是移动浏览器的天下。HTML5、JavaScript及其各种框架将实现客户端的大一统局面。不是Swing不行、而是桌面应用过时了。


桌面市场并没缩小,只不过移动手持的市场后劲十足,HTML必然能将触角涉及移动领域,但未必如楼上javagui所言HTML5统一天下,移动世界的技术依然是百花齐放,分久必合合久必分的历史规律早就注定没有谁能统一一切,哪怕是apple和google。

我从2001年就开始搞flash到现在,我依然能依靠flash技术养家糊口,我们公司做的桌面game也能跑到android上


97 楼 xiaozhonghua 2010-07-01  
javagui 写道
献上我06年做的一款IM,可惜是SWT做的,如果能用Swing的话效果更加。



我不理解桌面时代为什么那么多不了解Swing的人鄙视Swing,我一直看好Swing的高度的自定义组件的能力。可惜未来是移动、甚至是移动浏览器的天下。HTML5、JavaScript及其各种框架将实现客户端的大一统局面。不是Swing不行、而是桌面应用过时了。

哇果然是高手,厉害厉害!
96 楼 javagui 2010-07-01  
献上我06年做的一款IM,可惜是SWT做的,如果能用Swing的话效果更加。



我不理解桌面时代为什么那么多不了解Swing的人鄙视Swing,我一直看好Swing的高度的自定义组件的能力。可惜未来是移动、甚至是移动浏览器的天下。HTML5、JavaScript及其各种框架将实现客户端的大一统局面。不是Swing不行、而是桌面应用过时了。
95 楼 wwwwwhg 2010-07-01  
当时我就惊呆了..   学习 c/s程序框架中
94 楼 elan1986 2010-07-01  
看了后 让我改变了swing的不成熟认识

有时间好好看看swing,这一块还是有潜力的,只是需要时间
93 楼 lianzerong 2010-07-01  
相当好 ! 谢了楼主 ! 学习啦!
92 楼 ccc520 2010-06-30  
开发的慢是因为没有自己的组件

没人会每开发一个组件都重头来

布局不好是没有自己的布局管理器,朋友,swing玩转玩不转还是看积累

最快的更改外观的方式是设置Theme,不信可以试试,手动setFont和在THeme里面设置font的启动速度

走SynthLookandFeel那一路的xml加载速度是最慢的,国外有评测NimbusLookAndFeel速度是最慢的

另外用SynthLookandFeel还要自己写painter,对美工也不是很方便,除非都是用图片

界面漂亮不漂亮关键看自己的ps水平,自己先ps出来再用java2d实现,不过要是有美工朋友或者用图片也可以,个人不喜欢用图片

另外顶楼主,开发的相当不错
91 楼 dxiao2 2010-06-30  
xiaozhonghua 写道
dxiao2 写道
lz说开发swing部分大概用了一周时间
我觉得还是非常有效率了

我觉得swing开发起来还是比较慢
当你的页面相对简单 比如一个JTable 几个JComboBox 几个JTextField的时候 还好
如果是复杂界面 比如有几十个组件混合排版 并且组件之间数据载入还有逻辑关系.每个组件都需要n个加监听器来控制别的组件
我觉得这个工程量就很大了吧.

提一个问题
请问lz通常使用什么layout来布局组件
谢谢


谢谢支持,其实一周时间确实比较仓促,还有不少细节需要优化和完善一下。不过,这个东西作为一个小UI框架,是直接可以被复用到不同的项目中去的。从这个角度来说,这一两周花的还是很值。

Swing的layout确实比较烦人的一个事情。如果用IDE的话,我推荐NetBeans里面的GUI编辑工具,它使用的实际是Matisse这个layout。这里有两篇文章:
http://wiki.netbeans.org/UsingGUIEditor
http://netbeans.org/features/java/swing.html

如果手写代码,我还是推荐一个超强但比较复杂的TableLayout。这里有其介绍:
http://java.sun.com/products/jfc/tsc/articles/tablelayout/

其他简单的布局,大多可以用Swing内置的几个layout搞定。另外尽量多套用Panel进行嵌套,化繁为简。不要试图一次一个Panel+Layout把一个复杂的界面搞定,那样会很累。


我现在用的就是xml配置组件位置 添加监听器 设置组件属性
我用的布局是MultiSplitPaneLayout
感觉很多时候都要用panel嵌套. 我觉得这个其实也不是个好办法. 只是个替代方法.
因为白白创建了那么多JPanel 觉得很不爽.
90 楼 dxiao2 2010-06-30  
jjx 写道
dxiao2 写道
jjx 写道
界面不错

不过实际使用中,这么多tab page ,查询数据要占用大量的内存

可以预料的这个程序内存占用已经不行了

其实erp程序界面不需要漂亮,简单,并且要易于扩展(这个很重要),因为erp 的功能可能很复杂,在一个界面上会展示多个功能


不知道大哥是怎么预料出来的...你不会把tab page想像成网页了吧



tabpage 里没控件了,控件不用内存吗?重要的是里面的数据,一个网格几百上千个对象不占内存吗?


首先界面漂亮和易于扩展是不冲突的吧.难道功能复杂了就要导致界面难用吗,什么逻辑啊? 功能越复杂 界面的设计越重要, 这样用户才有更好的操作体验 不是吗.

tabpage里的控件当然用内存 貌似没有什么东东是不需要内存的吧.

这个又不是在手机上开发的程序 貌似每个单元格作为对象出现不会成为性能瓶颈吧.再说 你完全可以用filter去过滤表格里的数据 得到你想要的部分.
89 楼 allenmoom 2010-06-30  
ding swing
lz这个做的忒精致啦

相关推荐

    java swing是一把刀

    文件名列表中的"swing第一刀.doc、swing第三刀.doc、swing第二刀.doc、swing第四刀.doc"可能包含了一系列教程或示例,指导读者如何利用Swing的特性。这些文档可能涵盖了从基本组件的使用到高级主题,如布局管理、...

    SWING大刀系列源码

    主题:Swing是一把刀 http://www.iteye.com/topic/702804 主题:Swing第二刀:枝间新绿一重重 http://www.iteye.com/topic/707540 主题:Swing第二小刀刀:星星之火可以燎原 http://www.iteye.com/topic/707514 ...

    Swing_大刀系列.pdf

    1.1 Swing是一把刀 1.2 Swing第二刀:枝间新绿一重重 1.3 Swing第三刀:做套ERP,要配得上我的登录界面! 1.4 Swing第四刀:代码尽散换芳华 1.5 Swing第五刀:走马观花看世博 1.6 Swing第六刀:老婆不能换,窗户框...

    Swing第一刀(转)

    Swing第*刀(转) 觉得很好,发给大家看看,不需要分

    Swing是把刀学习代码

    这个“Swing是把刀学习代码”项目显然旨在帮助开发者了解如何利用Swing来创建功能丰富的、具有吸引力的桌面应用。 Swing提供了大量的组件,如按钮、文本框、菜单等,这些组件可以被用来构建用户界面。它的优势在于...

    Swing大刀系列

    - **Swing的现状**: Swing作为一种桌面应用开发框架,在Web技术和RIA(富互联网应用)兴起后受到了冷落。很多人认为Swing已经过时或者即将被淘汰。 - **Swing的价值**: 实际上,Swing仍然是一种强大的工具,适合用于...

    Swing第二刀(转)

    Swing第*刀(转) 觉得很好,发给大家看看,不需要分

    Swing这一刀

    "Swing这一刀"指的是在Java编程领域中对Swing库的深入理解和应用。Swing是Java的一个图形用户界面(GUI)工具包,它提供了丰富的组件和功能,用于创建桌面应用程序。这篇博客文章可能详细探讨了Swing在构建用户界面...

    Swing第三刀(转)

    Swing第*刀(转) 个人觉得不错,发来大家学习,不要分

    Swing第四刀(转)

    Swing第*刀(转) 个人觉得不错,发来大家学习,不要分

    Swing第六刀(转)

    Swing第*刀(转) 个人觉得不错,发来大家学习,不要分

    Swing第五刀(转)

    Swing第*刀(转) 个人觉得不错,发来大家学习,不要分

    swing教程 swing教程

    Swing 包是 JFC 的一部分,由许多包组成,例如 javax.swing、javax.swing.plaf、javax.swing.border 等。 Swing 的应用 Swing 广泛应用于 Java 的 GUI 开发,例如创建复杂的 GUI 界面、实现跨平台的 GUI 应用程序...

    Swing第三刀:做套ERP,要配得上我的登录界面

    Swing第三刀:做套ERP,要配得上我的登录界面

    swing计算器,swing计算器 swing计算器

    Swing计算器是一款基于Java Swing库开发的简单计算工具。Swing是Java的一种图形用户界面(GUI)工具包,它是Java Foundation Classes (JFC)的一部分,主要用于构建桌面应用程序。本项目的核心在于利用Swing组件来...

    java swing三把刀

    在提供的文件列表中,我们看到有四份文档分别命名为“swing第一刀.doc”、“swing第二刀.doc”、“swing第三刀.doc”和“swing第四刀.doc”,它们可能详细介绍了这些核心概念和技术。同时,“src.zip”可能包含了...

    java swing漂亮界面 超酷 javaswing教程

    Java Swing是Java编程语言中的一个图形用户界面(GUI)工具包,它是Java Foundation Classes (JFC)的一部分,用于帮助开发者创建桌面应用程序。Swing提供了一系列组件,如按钮、文本框、菜单等,允许开发者构建功能...

    swing-layout-1.0.3

    swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3swing-layout-1.0.3...

    SWING做一个IP输入框

    java SWING做一个IP输入框,功能很好

    一个简单Swing窗体

    Swing是Java编程语言中用于构建图形用户界面(GUI)的一个工具包,它是Java Foundation Classes (JFC)的一部分。在本项目"一个简单Swing窗体"中,开发者使用Swing来创建了一个基本的交互式窗口,具备点击事件的统计...

Global site tag (gtag.js) - Google Analytics