日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于绿色

發(fā)布時間:2025/7/14 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于绿色 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉自:http://www.iteye.com/topic/702804

關于綠色

喜歡綠色,喜歡雅黑,無可救藥。在這個吵吵鬧鬧的軟件行業(yè),綠色也忽然從“春風一拂千山綠”唯美變成俗不可耐的buzzword。比如:

?

  • 綠色軟件:大大的buzzword。忽然一夜之間,所有的軟件都綠色了,好像不“綠”就跟不上形勢。比如綠色殺毒,綠色OFFICE,綠色ERP,綠色windows。反正全綠。
  • 綠色征途:看,精神鴉~片也可以很“綠”的;
  • 綠~壩-花季護航:呃,老好的軟件,不多說了;
  • 綠色世博:嗯,喊的老響了。至今一頭霧水。
綠色還有一些不好的詞,比如人人避之不及的“綠帽子”之類。臺灣的綠營也代表了大壞蛋那幫人(至少陳水扁帶了個頭)。還有“我把老板氣的臉都綠了”、”老板整天燈紅酒綠“,也都不是什么好詞。
不過綠色更多的還是代表了“春天、自然、環(huán)保、低碳”等沒好的東西。皮尤慈善信托基金(Pew)在一份名為《綠色改變世界》的研究報告中指出,計算機屏幕如果使用綠色可以節(jié)省大量電能并降低輻射,保護使用者雙眼和皮膚。例如一個全屏顯示的綠色軟件界面可以讓一臺液晶顯示器消耗功率降低13.7瓦;假設美國電腦擁有量為5299萬臺來計算,每年僅關機狀態(tài)功耗一項可以節(jié)約 6.2億度電。如果我們把所有的軟件都設計成“綠色”這個環(huán)保色,每臺計算機都會減少5%的電能和輻射,人的情緒也會更加平緩舒暢,心臟和雙肺由此減少12%的血液循環(huán)負擔,從而降低人類對氧氣的需求和二氧化碳的呼出達到14%。加上節(jié)省下來的對皮膚護理保養(yǎng)、心肺疾病治療、近視以及眼鏡相關行業(yè)對自然資源的消耗,每年全球可以節(jié)省1400億美元的資源消耗,相當于減少砍伐8500平方公里的亞馬遜熱帶雨林,對于處于正在復蘇之中的世界經(jīng)濟具有說一不二的作用。看來,“綠色軟件”,先把自己的界面搞“綠”了,就是地球的一大幸事!
(注意:上述報告和數(shù)據(jù)純屬胡謅八扯,如有雷同,純屬巧合。)
但是制作一個綠色的軟件界面確實一個心愿。尤其是能夠體現(xiàn)“枝間新綠一重重,小蕾深藏數(shù)點紅”的那種感覺!現(xiàn)在終于有了,經(jīng)過一個多星期的折騰,終于有了一個雛形,在上一篇博文《Swing是一把刀》中給大家看到的:

?

?

?

?

框架,還是框架

這個程序的設計初衷是快速建立一個美觀的Swing應用程序外觀。但是,具體來說,它又并非完全是下面幾個東西:

  • LookAndFeel:這個程序并非一個LnF。一個LnF會對所有的Swing組件進行重新定義Paint并可以通過UIManager.setLookAndFeel進行啟用。這個程序用到了大量LookAndFeel的機制,甚至也直接定義了不少UI。不過它并不是一個完整的LookAndFeel。這些定制完全是為這個程序框架服務的。也就是說,這些UI和重繪機制只有在當前的程序框架起作用,而無法指望一句UIManager.setLookAndFeel就將你的任意Swing程序變成上圖風格。
  • 組件庫:也不是組件庫。其實里面的組件,除了這個OutlookPane(左側的模塊樹)是完全新做出來的(而且沒有從JTabbedPane繼承,也許理論上還經(jīng)不起太嚴謹?shù)耐魄?#xff09;,其他的組件都是很簡單、現(xiàn)成的。例如列表、按鈕、菜單等,都是直接用Swing的,只是重載了一些方法或者定義了UI而已。而且我并非是想讓大家直接new OutlookPane()這樣來使用,而是使用XML文件對整個界面進行配置使用;
  • GUI程序框架:似乎有點大。這僅僅是一個很小的程序而已。

做Java的喜歡滿嘴Framework。你要是不能氣定神閑一口氣提到20個Framework并有意無意的暗示自己很精通,那~都不好意思跟人家說話;最好再能挑一個有點名氣的,指手畫腳、評頭論足、怒其不爭一下下,那就像大牛了(例如Hibernate就是個很不錯的candidate)。所以,咱這個小程序也就死乞白賴往“框架”上湊湊,反正已經(jīng)帶上了“綠帽子”,也不怕丟人丟到底。

?

好吧,這是一個框架,雖然我也不知道框架該怎么定義。反正我的設計初衷是:如果你用Swing開發(fā)一個類似上圖結構的應用程序,那么你可以直接用這個框架。這個程序框,包含了上面菜單、地下狀態(tài)條、左邊模塊欄、右邊功能快捷列表,中間多tab標簽頁的各種內(nèi)容(也提供了幾個常用的內(nèi)容頁風格,例如列表、流程圖等)。這個窗口已經(jīng)被封裝好,通過XML配置文件來定義菜單、狀態(tài)條、模塊欄、流程圖、右邊的快捷列表。同時,這些都是聯(lián)動的。例如:點擊左邊的模塊欄中的子模塊,一個對應的流程圖會顯示在中間tab頁;選中流程圖中的節(jié)點,可以把該節(jié)點相關的功能列在右側。點擊右側列表,可以執(zhí)行各種定義好的動作(動作通過動作碼定義,后面會詳細介紹)。使用么,直接new 一個窗口類,set各個部分的XML文件名,然后setVisible(true)就OK了。至于中間的各個組件和大家關心的LookAndFeel,則都定義好了,基本上不用太關心細節(jié)。

?

不管怎么說,我們就叫它“框架”吧。

?

XML配置

每個應用程序都千奇百怪,功能各異。如何用一個同樣的界面來組織呢?的確,這個界面并非適合所有人。不過這里的所有菜單、按鈕、流程圖、圖標等,其動作都是可以用一個“動作碼”類定義的,所有的動作都會回調(diào)一個統(tǒng)一的函數(shù)。而我們只要在這個函數(shù)處插入監(jiān)聽,就可以攔截具體動作碼,執(zhí)行我們想做的任何事情,例如格式化C盤、往aobama@whitehouse.com郵箱發(fā)個垃圾郵件啥的。

?

例如,要定義主菜單,通過這個XML:

?

Xml代碼??
  • <?xml?version="1.0"?encoding="UTF-8"?>??
  • <menubar>??
  • ??<menu?text="System">??
  • ????<menu?text="One?Sub?Module">??
  • ??????<menuitem?text="Test?Report?Item"?tooltip="Tooltip"???
  • ????????????????????????????icon="/free/email.png"?action="A001"/>??
  • ??????<menuitem?text="Test?Report?Item"?tooltip="Tooltip"???
  • ????????????????????????????icon="/free/email.png"?action="A001"/>??
  • ??????<menuitem?text="Test?Report?Item"?tooltip="Tooltip"???
  • ????????????????????????????icon="/free/email.png"?action="A001"/>??
  • ??????<menuitem?text="Test?Report?Item"?tooltip="Tooltip"???
  • ????????????????????????????icon="/free/email.png"?action="A001"/>??
  • ...??
  • ??</menu>??
  • </menubar>??
  • ?

    ?以上XML可以定義一個System的主菜單,以及一個One Sub Module的菜單項,以及一系列的二級菜單。每個菜單都可以設置icon圖標、文字、tooltip文字,以及動作碼(就是那個action)。如下圖:


    ?

    左側的模塊欄就是典型的Outlook的風格,很多軟件干脆都叫它OutlookPane(我這里也是如此)。這個OutlookPane的配置,通過如下類似XML:

    ?

    Xml代碼??
  • <outlook>??
  • ??<module?text="Engineering?Box"???
  • ?????????????????icon="/free/test/module_unselected.png"???
  • ?????????????????selected_icon="/free/test/module_selected.png"???
  • ?????????????????network="network.xml">??
  • ??</module>??
  • </outlook>??
  • 同樣,主模塊(也就是每個大分欄)包含了模塊欄的文字、icon圖標(選中和未選中兩個),以及一個xml文件。這個xml文件包含了一個流程圖,流程圖包含了具體的子模塊。點擊展開大模塊欄后,所有的子模塊也會顯示在欄目中,同時模塊的流程關系會通過對應的xml文件中定義的方式,顯示在一個圖形化的流程圖界面中,最終顯示在中間的tab頁上。

    ?


    可以看到,左側的模塊列表和中間的圖形節(jié)點是一一對應的。當鼠標選中節(jié)點后(變成橙色),左側的列表對應的項也會被選中。同時,和這個節(jié)點(代表了一個具體子模塊)相關的功能,都會顯示在右側的快捷列表中(這是通過指向的network.xml文件定義的)

    ?

    上面例子中的Network.xml內(nèi)容舉例如下:

    ?

    Xml代碼??
  • <?xml?version="1.0"?encoding="UTF-8"?>??
  • <network>??
  • ????<node?x="30"?y="50"??
  • ??????????text="AP?Prepay"??
  • ??????????network_text="AP?Prepay"??
  • ??????????tooltip="This?is?a?tooltip?of?a?node"??
  • ??????????icon="/free/test/module.png"??
  • ??????????list_icon="/free/test/submodule.png">??
  • ????????<button1?tooltip="Tooltip"???
  • ????????????????????????????icon="/free/test/module_attachment.png"?action="X002"/>??
  • ????????<button2?tooltip="Tooltip"???
  • ????????????????????????????icon="/free/test/module_attachment.png"?action="X002"/>??
  • ????????<button3?tooltip="Tooltip"???
  • ????????????????????????????icon="/free/test/module_attachment.png"?action="X002"/>??
  • ????????<shortcuts>??
  • ????????????<separator?text="Most?Often?Used?Reports"/>??
  • ????????????<shortcut?text="Add?a?Part"?tooltip="Tooltip"???
  • ????????????????????????????icon="/free/submodule.png"?action="Z010"/>??
  • ????????????<shortcut?text="Delete?a?Part"?tooltip="Tooltip"???
  • ????????????????????????????icon="/free/submodule.png"?action="Z010"/>??
  • ????????????<shortcut?text="AP?Aging?Report"?tooltip="Tooltip"???
  • ????????????????????????????icon="/free/chart.png"?action="Z010"/>??
  • ????????????<shortcut?text="MRP?for?All?Parts?Used?this?Month"?tooltip="Tooltip"???
  • ????????????????????????????icon="/free/user.png"?action="Z010"/>??
  • ????????????<shortcut?text="Dashboard?of?this?Month"?tooltip="Tooltip"???
  • ????????????????????????????icon="/free/email.png"?action="Z010"/>??
  • ????????????<shortcut?text="All?Open?Purchase?Orders"?tooltip="Tooltip"???
  • ????????????????????????????icon="/free/chart.png"?action="Z010"/>??
  • ????????????<shortcut?text="Search?in?Address?Book"?tooltip="Tooltip"???
  • ????????????????????????????icon="/free/user.png"?action="Z010"/>??
  • ????????????<shortcut?text="All?Online?Users"?tooltip="Tooltip"???
  • ????????????????????????????icon="/free/email.png"?action="Z010"/>??
  • ????????????<separator?text="Common?Reports"/>??
  • ????????????<shortcut?text="All?Open?Purchase?Orders"?tooltip="Tooltip"???
  • ????????????????????????????icon="/free/chart.png"?action="Z010"/>??
  • ????????????<shortcut?text="Search?in?Address?Book"?tooltip="Tooltip"???
  • ????????????????????????????icon="/free/user.png"?action="Z010"/>??
  • ????????????<shortcut?text="All?Online?Users"?tooltip="Tooltip"???
  • ????????????????????????????icon="/free/email.png"?action="Z010"/>??
  • ????????????<shortcut?text="All?Open?Purchase?Orders"?tooltip="Tooltip"???
  • ????????????????????????????icon="/free/chart.png"?action="Z010"/>??
  • ????????????<shortcut?text="Search?in?Address?Book"?tooltip="Tooltip"???
  • ????????????????????????????icon="/free/user.png"?action="Z010"/>??
  • ????????????<shortcut?text="All?Online?Users"?tooltip="Tooltip"???
  • ????????????????????????????icon="/free/email.png"?action="Z010"/>??
  • ????????????<shortcut?text="All?Open?Purchase?Orders"?tooltip="Tooltip"???
  • ????????????????????????????icon="/free/chart.png"?action="Z010"/>??
  • ????????????<shortcut?text="Search?in?Address?Book"?tooltip="Tooltip"???
  • ????????????????????????????icon="/test/user.png"?action="Z010"/>??
  • ????????????<shortcut?text="All?Online?Users"?tooltip="Tooltip"???
  • ????????????????????????????icon="/free/email.png"?action="Z010"/>??
  • ????????</shortcuts>??
  • ????</node>??
  • </network>??
  • ?其中,每個node定義了一個子模塊節(jié)點。節(jié)點上包含x、y坐標信息、文本信息、tooltip、icon圖標(中間大的主圖標),以及三個按鈕。每個node如圖所示,可以攜帶3個按鈕。每個按鈕可以掛一個圖標、tooltip、icon以及動作碼。我們可以定義其任意動作。

    ?


    然后,每個node又攜帶了一個shortcuts列表,包含了這個節(jié)點所有相關的功能點,在node被選中后,以右側的列表方式列出。如圖所示:

    ?


    此外,流程圖中的箭頭是通過類似如下XML在network.xml中定義:

    ?

    Xml代碼??
  • <arrow?x="170"?y="80"?direction="left"?rotation="0"/>??
  • ?其中x、y是坐標,direction是方向,可以是上下左右以及斜向共8個方向。此外rotation還提供了旋轉角度。如果right_up這個45度的右上角度不符合要求,可以在增加rotation進行進一步調(diào)節(jié)。

    ?

    右側快捷列表的分割文字,也是通過如下xml進行定義:

    ?

    Xml代碼??
  • <shortcuts>??
  • ????????????<separator?text="Most?Often?Used?Reports"/>??
  • ????????????<shortcut?text="Add?a?Part"?tooltip="Tooltip"???
  • ????????????????????????????icon="/free/test/submodule.png"?action="Z010"/>??
  • ...??
  • ?分隔條可以攜帶一個文字,用來對很多列表項進行分組:


    ?

    還有工具條也是可以配置的。工具條在這個框架里被放在了模塊欄的頂部。通過如下XML配置其按鈕:

    ?

    ?

    Xml代碼??
  • <?xml?version="1.0"?encoding="UTF-8"?>??
  • <toolbar>??
  • ????<button?tooltip="Tooltip"?icon="/free/test/message.png"?action="B001"?/>??
  • ????<separator/>??
  • ????<button?tooltip="Tooltip"?icon="/free/test/user.png"?action="B001"?/>??
  • ????<separator/>??
  • ????<button?tooltip="Tooltip"?icon="/free/test/email.png"?action="B001"?/>??
  • ????<separator/>??
  • ????<button?tooltip="Tooltip"?icon="/free/test/viewer.png"?action="B001"?/>??
  • ????<separator/>??
  • ????<button?tooltip="Tooltip"?icon="/free/test/chart.png"?action="B001"?/>??
  • ????<separator/>??
  • ????<button?tooltip="Tooltip"?icon="/free/test/capture.png"?action="B001"?/>??
  • ????<separator/>??
  • ????<button?tooltip="Tooltip"?icon="/free/test/image_edit.png"?action="B001"?/>??
  • ????<separator/>??
  • </toolbar>??
  • ?

    其中<separator>定義了一個分割豎線 ,完全美觀之用。顯示效果如下:



    ?

    ?

    最后一個配置項是軟件右上角的LOGO。每個系統(tǒng)都想有一個地方漂亮的顯示咱家的LOGO,那才有成就感!這里通過menubar菜單的XML文件如下配置:

    ?

    ?

    Xml代碼??
  • <logo?image="/free/test/logo_company.png"?tooltip="WPT?Power?Transmission"?/>??
  • ?

    可以對圖片、tooltip進行定義。顯示效果如下:

    ?


    這樣,一個完整的”純綠色“應用程序框架就差不多被”配置“出來了。

    ?

    程序接口

    其實設計初衷是無需使用源代碼,直接使用下方提供的jar包即可進行二次開發(fā)。因為畢竟通過XML就可以對界面元素進行定義了。如果要把這個框架集成到你的應用程序中,并執(zhí)行你的具體動作,只需要對free.Shell這個類進行一個函數(shù)重載即可。

    ?

    Java代碼??
  • public?void?command(String?action)?{??
  • ????????String?message?=?"Perform?action?"?+?action?+?".";??
  • ????????this.lbStatusMessage.setText(message);??
  • }??
  • ?

    在Shell這個類中,界面上所有的按鈕、菜單、列表等被點擊后,都會回調(diào)這個Shell的command方法,并傳回action字符串,也就是我們在XML中定義的動作碼。接著你就用if else或者case啥的進行處理動作吧!當然也可以調(diào)用addTab方法在Shell界面中添加一個tab頁面。其使用方法會下次詳細闡述。?

    ?

    關于效率、內(nèi)存、布局和其他

    有朋友說很擔心執(zhí)行效率、內(nèi)存占用。這是對Swing常被攻擊的的一個老話題了。簡單直接的回答是:Swing效率沒問題。內(nèi)存占用沒問題。滿眼嘩嘩一片字符串,就一定占內(nèi)存嗎?table有1000行,渲染的花里胡哨,就內(nèi)存問題嗎?完全不是這么一回事。例如,如果你了解Swing的table的renderer機制,其實無論表格有多少行,一個列是用同一個renderer實例來paint的。注意,是一個實例哈。editor也是一樣。很多初學者以為這一列用JComboBox編輯,1000行就會create成1000個ComboBox。那就完全錯了。Renderer就是一個“橡皮章”,一個章,不停的在每個格子里面“蓋章”,重繪就重新蓋;Editor就是當一個“蘿卜”,哪個“坑”需要編輯時,table動態(tài)把它“放”在這個單元格(坑)上面,下次下個單元格需要編輯,再被挪過去。對于一個列來說,就一個蘿卜,一個橡皮章。怎么會說“占用內(nèi)存”?如果說1000行字符串占用內(nèi)存,那這些字符串用什么語言和平臺不占用內(nèi)存呢?同樣字符串在不同的語言和平臺上可以說占用內(nèi)存幾乎沒什么差別。這個以后可以專門討論。

    ?

    在這個本程序中,狀態(tài)欄上有一個封裝好的內(nèi)存監(jiān)控工具條:


    它的作用是監(jiān)測目前Java的總的申請的堆內(nèi)存以及使用的內(nèi)存。相關代碼如下:

    Java代碼??
  • MemoryMXBean?memorymbean?=?ManagementFactory.getMemoryMXBean();??
  • ??
  • long?usedMemory?=?memorymbean.getHeapMemoryUsage().getUsed();??
  • long?totalMemory?=?memorymbean.getHeapMemoryUsage().getMax();??
  • 上面圖片中的“18M/63M”標明默認Java堆大小是64M目前使用了18M。嘗試多打開一些表格界面、拓撲圖界面,可見內(nèi)存使用并不是很多。

    ?

    說Swing的效率低,也不是很有說服力。其實Swing本質(zhì)還是Java2D在paint東西,看看那些雜亂的Metal***UI源碼就知道了。不過Swing確實設計的夠復雜啰嗦,一個LnF就能繞死人。這些機制會導致Swing慢一些。不過說到底程序的快慢瓶頸還不是在Swing上,還是在如何設計和使用上。例如線程的處理等等,這些都不是初學者很容易搞定的東西。這也導致Swing總是被貼上“慢”的標簽。

    ?

    自動布局方面,也是比較啰嗦的。如果用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內(nèi)置的幾個layout搞定。另外盡量多套用Panel進行嵌套,化繁為簡。不要試圖一次一個Panel+Layout把一個復雜的界面搞定,那樣會很累。

    ?

    有朋友很不齒這里使用到了JGoodies和TWaver,這里也說明一下。在JGoodies的基礎上再去定制UI確實美觀了不少,不過理論上確實可以徹底拋開JGoodies。這樣就要完全徹底重寫一整套的LnF了,包括文本框按鈕啊所有的東西。目前確實還沒有這樣的時間和精力,以后會考慮出一個WithoutJGoodies版本。使用TWaver主要是為了做中間的流程圖和拓撲圖,并且使用的也比較順手了。如果不需要中間的拓撲圖流程圖,也可以without TWaver,以后會考慮改一版。不過這些東西都是很不錯的工具,能用就拿來為我所用,不喜歡用就借鑒一下了事。

    程序下載

    本程序可以在這里下載。

    ?

    執(zhí)行方法:解壓zip文件,雙擊其中的run.bat。

    運行環(huán)境:Java 6。

    其他說明:zip包中的free.jar就是本文提到的框架。其他兩個jar包是jgoodies lnf和twaver做流程圖的支撐包,可不用理會。

    ?

    由于牽扯到公司的業(yè)務,程序的源代碼還在整理之中,預計還要一周左右會整理完畢。到時候一定會跟大家分享整個程序的源代碼。下一次我會詳細介紹每一個組件的制作方法和相關代碼。

    轉載于:https://www.cnblogs.com/smileallen/archive/2013/04/16/3391543.html

    總結

    以上是生活随笔為你收集整理的关于绿色的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。