收到一個朋友的郵件說如何在Swing中實現組件的動畫效果就像JIDE的那些組件一樣的確Swing框架的靈活性和可擴展性使得它非常適合做這樣Makeover工作我簡單總結一了以下這種組件不外乎要有以下三種元素
外觀華麗這包括使用漸變色線條和字體反走樣圖標設計漂亮搶眼界面變化要柔和等等但要避免設計太花哨給人華而不實的感覺原則上避免顏色太碎圖標應以簡潔為主不可濫用圖片等技術上沒有多大要求主要是美工你需要掌握各種做圖工具自己最好有好的審美和設計能力
動畫效果組件行為變化要柔和化盡量使用動畫效果如淡入淡出滾動彈出等等技術上最常用的方法是使用javaxswingTimer為什麼要使用javaxswingTimer這是因為javaxswingTimer觸發的事件都在EDT上執行是線程安全的除此外還需掌握Java D的常用接口及圖像處理的常見技巧
空間布局這種組件空間布局的特點是立體動態拖拽式的這和人的認知能力有關人類認知的特點是具體到抽象二維靜態和鍵盤式操作對普通用戶來說太過抽象和專業化需要一定的輔助學習才能理解的而三維動態拖拽式操作更貼近於感性的認知范疇因此這類組件經常有浮動式窗口組件布局動態變化及拖拽式操作等特征實現技術包括布局管理器(LayoutManager)Swing組件分層結構Swing事件體系結構以及DnD接口等
美工對於java程序員來說可能比較缺乏但是華麗外觀不僅僅是美工技術這包括一些宏觀設計原則java程序員完全可以通過掌握這些方針原則來提高自己的設計水平前面文章介紹那個《Swing外觀設計方針》就是一本這樣的書至於美工我覺得如果你有美術天分那就要充分利用;如果沒有那麼你可以模仿熟悉幾種的圖形工具就完全可以不用自己的畫圖做出比較漂亮的圖標圖片(當然沒有考慮版權問題)我就是後者但是我發現我平時只需要PrScrn鍵(抓圖)Paint(Windows 畫圖工具切圖剪裁轉換格式)PowerPoint/OpenOffice Imprise(畫圖)Google Image(搜索圖片)就已經足夠了其他所需的技術就需要你掌握Swing和Java D方方面面的技術了當然復雜的組件不僅僅是靠掌握這些技術能解決的可能你還需要能比較好地熟悉各種編程模式
這個朋友特別提到Windows上的折疊式操作面板他說
另外我對JIDE中兩個東西很感興趣一個是CollapsiblePanel(Windows Explorer左邊的常見任務)點擊後折疊展開子面板而且是動畫效果
因此昨晚就特地試了一下雖然以前就大概明白使用Timer和布局管理器以及圖像處理就可以實現這些東西但一直沒有做昨晚的實驗還是很成功的大概花了兩個小時就實現了這個面板工作過程大概就是分解這些面板組件解析那部分需要動畫應該在哪兒觸發何種事件另外就是編寫這些組件不斷調試這個過程的大部分時間都被效果調整占去了你需要不斷的運行程序抓取屏幕然後將它帖到Paint中然後放大然後和Windows上的抓圖比較包括大小尺寸顏色字體微觀變化等等最後算是基本實現了Windows這個折疊式的面板組件下面的是我的演示程序的一個抓圖
這個是淡出淡入動畫效果
下面的Enable Animation的JCheckBox可以設置是否使用動畫效果選擇上折疊和展開就具有動畫效果
這個組件的類名是dynoswingbeansFolderPane使用比較簡單
FolderPane fp=new FolderPane();//設置是否有動畫效果缺省沒有
fpsetAnimated(true);//添加子面板
fpaddFolder(文件和文件夾任務 getFileFolderPane());
fpaddFolder(其他位置 getOtherPlacePane());
fpaddFolder(詳細信息 getDetailsPane());
add(fp BorderLayoutCENTER);
主要接口有兩個
設置是否要動畫效果
public void setAnimated(boolean b)
添加面板title是面板標題文字content是應用程序組件
public void addFolder(String title JComponent content)
這個演示是一個NetBeans工程編譯之後直接雙擊foldered_panejar既可觀看效果源代碼中有詳細的注解
更新剛剛修改了一下現在可以支持JScrollPane即能放到JScrollPane並能在動畫時動態的更新JScrollPane狀態
From:http://tw.wingwit.com/Article/program/Java/hx/201311/25954.html