close


原文地址http://www.iteye.com/topic/702804






关于绿色



喜欢绿色,喜欢雅黑,无可救药。在这个吵吵闹闹的软件行业,绿色也忽然从“春风一拂千山绿”唯美变成俗不可耐的buzzword。比如:



 




  • 绿色软件:大大的buzzword。忽然一夜之间,所有的软件都绿色了,好像不“绿”就跟不上形势。比如绿色杀毒,绿色OFFICE,绿色ERP,绿色windows。反正全绿。


  • 绿色征途:看,精神鸦~片也可以很“绿”的;


  • 绿~坝-花季护航:呃,老好的软件,不多说了;


  • 绿色世博:嗯,喊的老响了。至今一头雾水。



绿色还有一些不好的词,比如人人避之不及的“绿帽子”之类。台湾的绿营也代表了大坏蛋那帮人(至少陈水扁带了个头)。还有“我把老板气的脸都绿了”、”老板整天灯红酒绿“,也都不是什么好词。





不过绿色更多的还是代表了“春天、自然、环保、低碳”等没好的东西。皮尤慈善信托基金(Pew)在一份名为《绿色改变世界》的研究报告中指出,计算机屏幕如果使用绿色可以节省大量电能并降低辐射,保护使用者双眼和皮肤。例如一个全屏显示的绿色软件界面可以让一台液晶显示器消耗功率降低13.7瓦;假设美国电脑拥有量为5299万台来计算,每年仅关机状态功耗一项可以节约
6.2亿度电。如果我们把所有的软件都设计成“绿色”这个环保色,每台计算机都会减少5%的电能和辐射,人的情绪也会更加平缓舒畅,心脏和双肺由此减少12%的血液循环负担,从而降低人类对氧气的需求和二氧化碳的呼出达到14%。加上节省下来的对皮肤护理保养、心肺疾病治疗、近视以及眼镜相关行业对自然资源的消耗,每年全球可以节省1400亿美元的资源消耗,相当于减少砍伐8500平方公里的亚马逊热带雨林,对于处于正在复苏之中的世界经济具有说一不二的作用。看来,“绿色软件”,先把自己的界面搞“绿”了,就是地球的一大幸事!





(注意:上述报告和数据纯属胡诌八扯,如有雷同,纯属巧合。)





但是制作一个绿色的软件界面确实一个心愿。尤其是能够体现“枝间新绿一重重,小蕾深藏数点红”的那种感觉!现在终于有了,经过一个多星期的折腾,终于有了一个雏形,在上一篇博文《Swing是一把刀》中给大家看到的:










 



 



 




 



框架,还是框架



这个程序的设计初衷是快速建立一个美观的Swing应用程序外观。但是,具体来说,它又并非完全是下面几个东西:




  • LookAndFeel:这个程序并非一个LnF。一个LnF会对所有的Swing组件进行重新定义Paint并可以通过UIManager.setLookAndFeel进行启用。这个程序用到了大量LookAndFeel的机制,甚至也直接定义了不少UI。不过它并不是一个完整的LookAndFeel。这些定制完全是为这个程序框架服务的。也就是说,这些UI和重绘机制只有在当前的程序框架起作用,而无法指望一句UIManager.setLookAndFeel就将你的任意Swing程序变成上图风格。


  • 组件库:也不是组件库。其实里面的组件,除了这个OutlookPane(左侧的模块树)是完全新做出来的(而且没有从JTabbedPane继承,也许理论上还经不起太严谨的推敲),其他的组件都是很简单、现成的。例如列表、按钮、菜单等,都是直接用Swing的,只是重载了一些方法或者定义了UI而已。而且我并非是想让大家直接new
    OutlookPane()这样来使用,而是使用XML文件对整个界面进行配置使用;


  • GUI程序框架:似乎有点大。这仅仅是一个很小的程序而已。



做Java的喜欢满嘴Framework。你要是不能气定神闲一口气提到20个Framework并有意无意的暗示自己很精通,那~都不好意思跟人家说话;最好再能挑一个有点名气的,指手画脚、评头论足、怒其不争一下下,那就像大牛了(例如Hibernate就是个很不错的candidate)。所以,咱这个小程序也就死乞白赖往“框架”上凑凑,反正已经带上了“绿帽子”,也不怕丢人丢到底。



 



好吧,这是一个框架,虽然我也不知道框架该怎么定义。反正我的设计初衷是:如果你用Swing开发一个类似上图结构的应用程序,那么你可以直接用这个框架。这个程序框,包含了上面菜单、地下状态条、左边模块栏、右边功能快捷列表,中间多tab标签页的各种内容(也提供了几个常用的内容页风格,例如列表、流程图等)。这个窗口已经被封装好,通过XML配置文件来定义菜单、状态条、模块栏、流程图、右边的快捷列表。同时,这些都是联动的。例如:点击左边的模块栏中的子模块,一个对应的流程图会显示在中间tab页;选中流程图中的节点,可以把该节点相关的功能列在右侧。点击右侧列表,可以执行各种定义好的动作(动作通过动作码定义,后面会详细介绍)。使用么,直接new
一个窗口类,set各个部分的XML文件名,然后setVisible(true)就OK了。至于中间的各个组件和大家关心的LookAndFeel,则都定义好了,基本上不用太关心细节。



 



不管怎么说,我们就叫它“框架”吧。



 




XML配置


每个应用程序都千奇百怪,功能各异。如何用一个同样的界面来组织呢?的确,这个界面并非适合所有人。不过这里的所有菜单、按钮、流程图、图标等,其动作都是可以用一个“动作码”类定义的,所有的动作都会回调一个统一的函数。而我们只要在这个函数处插入监听,就可以拦截具体动作码,执行我们想做的任何事情,例如格式化C盘、往aobama@whitehouse.com邮箱发个垃圾邮件啥的。



 



例如,要定义主菜单,通过这个XML:



 





Xml代码 

...

" quality="high" type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/go/getflashplayer"> 
收藏代码





  1. <?xml version="1.0" encoding="UTF-8"?>  


  2. <menubar>  


  3.   <menu text="System">  


  4.     <menu text="One Sub Module">  


  5.       <menuitem text="Test Report Item" tooltip="Tooltip"   


  6.                             icon="/free/email.png" action="A001"/>  


  7.       <menuitem text="Test Report Item" tooltip="Tooltip"   


  8.                             icon="/free/email.png" action="A001"/>  


  9.       <menuitem text="Test Report Item" tooltip="Tooltip"   


  10.                             icon="/free/email.png" action="A001"/>  


  11.       <menuitem text="Test Report Item" tooltip="Tooltip"   


  12.                             icon="/free/email.png" action="A001"/>  


  13. ...  


  14.   </menu>  


  15. </menubar>  


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 lsx121924 的頭像
    lsx121924

    lsx121924的部落格

    lsx121924 發表在 痞客邦 留言(0) 人氣()