2012世界末日暨環境保護主題站,關注國內外最新2012世界末日信息,旨在通過關注,收集,展示2012世界末日相關資料的方式,喚醒并提高人們保護環境與愛護地球的意識,引導人類保護環境.
最近一直比較忙,所以一連幾天都沒有更新。本來覺得沒什么,后來有幾個網友都問起為什么沒有更新,才覺得大家對我的博客還是比較關心的。于是覺得挺對不起大家的。終于到了周末,昨天晚上忙乎了一晚上,寫了個Swing演示,今天把它共享出來,算是彌補。
收到一個朋友的郵件說如何在Swing中實現組件的動畫效果,就像JIDE的那些組件一樣。的確Swing框架的靈活性和可擴展性,使得它非常適合做這樣Makeover工作。我簡單總結一了以下,這種組件不外乎要有以下三種元素:
1.外觀華麗。這包括使用漸變色,線條和字體反走樣,圖標設計漂亮搶眼,界面變化要柔和等等。但要避免設計太花哨,給人華而不實的感覺。原則上避免顏色太 碎,圖標應以簡潔為主,不可濫用圖片等。技術上沒有多大要求,主要是美工,你需要掌握各種做圖工具,自己最好有好的審美和設計能力。
2.動畫效果。組件行為變化要柔和化,盡量使用動畫效果,如淡入淡出、滾動彈出等等。技術上最常用的方法是使用javax.swing.Timer。為什 么要使用javax.swing.Timer,這是因為javax.swing.Timer觸發的事件都在EDT上執行,是線程安全的。除此外還需掌握 Java 2D的常用接口及圖像處理的常見技巧。
3.空間布局。這種組件空間布局的特點是立體、動態、拖拽式的。這和人的認知能力有關。人類認知的特點是具體到抽象。二維、靜態和鍵盤式操作對普通用戶來 說太過抽象和專業化,需要一定的輔助學習才能理解的。而三維、動態、拖拽式操作更貼近于感性的認知范疇。因此這類組件經常有浮動式窗口、組件布局動態變化 及拖拽式操作等特征。實現技術包括布局管理器(LayoutManager)、Swing組件分層結構、Swing事件體系結構以及DnD接口等。
美工對于java程序員來說可能比較缺乏,但是華麗外觀不僅僅是美工技術,這包括一些宏觀設計原則。java程序員完全可以通過掌握這些方針原則來提高自 己的設計水平。前面文章介紹那個《Swing外觀設計方針》就是一本這樣的書。至于美工,我覺得如果你有美術天分,那就要充分利用;如果沒有,那么你可以 模仿,熟悉幾種的圖形工具就完全可以不用自己的畫圖做出比較漂亮的圖標、圖片(當然沒有考慮版權問題)。我就是后者,但是我發現我平時只需要PrScrn 鍵(抓圖)、Paint(Windows 畫圖工具,切圖、剪裁、轉換格式)、PowerPoint/OpenOffice Imprise(畫圖)、Google Image(搜索圖片)就已經足夠了。其他所需的技術就需要你掌握Swing和Java 2D方方面面的技術了。當然復雜的組件不僅僅是靠掌握這些技術能解決的,可能你還需要能比較好地熟悉各種編程模式。
這個朋友特別提到Windows上的折疊式操作面板,他說:
另外,我對JIDE中兩個東西很感興趣,一個是CollapsiblePanel(Windows Explorer左邊的常見任務),點擊后折疊、展開子面板,而且是動畫效果

因此昨晚就特地試了一下。雖然以前就大概明白使用Timer和布局管理器以及圖像處理就可以實現這些東西,但一直沒有做。昨晚的實驗還是很成功的,大概花 了兩個小時就實現了這個面板。工作過程大概就是分解這些面板組件、解析那部分需要動畫、應該在哪兒觸發何種事件。另外就是編寫這些組件,不斷調試。這個過 程的大部分時間都被效果調整占去了。你需要不斷的運行程序,抓取屏幕,然后將它帖到Paint中,然后放大,然后和Windows上的抓圖比較,包括大 小、尺寸、顏色、字體、微觀變化等等。最后算是基本實現了Windows這個折疊式的面板組件。下面的是我的演示程序的一個抓圖:
這個是淡出淡入動畫效果:
下面的Enable Animation的JCheckBox可以設置是否使用動畫效果。選擇上折疊和展開就具有動畫效果。
這個組件的類名是dyno.swing.beans.FolderPane。使用比較簡單:
FolderPane fp=new FolderPane();//設置是否有動畫效果,缺省沒有 fp.setAnimated(true);//添加子面板 fp.addFolder("文件和文件夾任務", getFileFolderPane()); fp.addFolder("其他位置", getOtherPlacePane()); fp.addFolder("詳細信息", getDetailsPane()); add(fp, BorderLayout.CENTER); |
主要接口有兩個:
設置是否要動畫效果 public void setAnimated(boolean b) 添加面板,title是面板標題文字,content是應用程序組件 public void addFolder(String title, JComponent content) |
這個演示的源碼可以從這兒下載,是一個NetBeans工程。編譯之后,直接雙擊foldered_pane.jar既可觀看效果。源代碼中有詳細的注解。 更新:剛剛修改了一下,現在可以支持JScrollPane,即能放到JScrollPane,并能在動畫時動態的更新JScrollPane狀態。

posted on 2012-02-08 21:26
todayx.org 閱讀(365)
評論(2) 編輯 收藏