摘要:本文以筆者的實際應用項目為基礎,探討如何在MDI風格的Java項目中靈活運用JInternalFrame和JDesktopPane,使我們的程序更加具有漂亮的外觀。
關鍵詞:JInternalFrame;Swing;MDI
中圖分類號:TP311 文獻標識碼:A 文章編號:1007-9599 (2012) 22-0000-02
MDI(Multiple Document Interface,多文檔界面風格界面)窗口處理方式在微軟的Office中使用非常廣泛,它為操作多個文檔提供了很大的方便,這種方式也被計算機軟件的使用者普遍接受。Java應用程序中要實現MDI窗口必須采用Swing的JInternalFrame和JdesktopPane來實現。
1 JInternalFrame和JdesktopPane簡介
JInternalFrame的使用跟JFrame幾乎一樣,可以最大化、最小化、關閉窗口、加入菜單等功能;唯一不同的是JInternalFrame是lightweight component,也就是說JInternalFrame不能單獨出現,必須依附在最上層組件上。由于這個特色,JInternalFrame能夠利用java提供的Look and Feel功能作出完全不同于原有操作系統(tǒng)所提供的窗口外型,也比JFrame更具有彈性。
如下圖1所示,一般我們會將Internal Fram加入Desktop Pane方便管理,Desktop Pane是一種特殊的Layered pane,用來建立虛擬桌面(Vitual Desktop)。它可以顯示并管理眾多Internal Frame之間的層次關系。
通過查看API文檔可知:JInternalFrame(String title,boolean resizable,boolean closable,boolean maximizable,boolean iconifiable);[1]它可建立一個可關閉、可更改大小、具有標題、可最大化與最小化的Internal Frame。它必須加入JDesktopPane中才有效,它產生internal frame event與JDesktopPane協(xié)同工作,由JDesktoPane來管理。
使用的基本步驟是:
2 應用中的問題與解決方案
在窗口運行過程中,每個內部窗口最大化后都是獨立的標題欄和圖標,不能統(tǒng)一回到主窗口的菜單欄上,特別影響美觀,與我們windows上的應用顯得格格不入。這是因為JInternalFrame是一個輕量級組件,必須依附在容器之中,它的大小不可能超出JDesktopPane。為了獲得想要的效果,我們對JInternalFrame的UI進行了改寫。核心代碼如下所示。[2]
SaleBackFrame類繼承自JInternalFrame,為它添加一個ComponentListener實現窗口最大化事件的監(jiān)聽。當組件大小改變時,調用componentResized方法,然后判斷如果組件大小是isMaximum()的,則將繪有關閉按鈕的那一條面板NorthPane隱藏。并定義hideNorthPane()和showNorthPane()兩個方法來實現單擊圖標按鈕時進行切換控制。下圖2是內部窗體在標準狀態(tài)下,當我們單擊最大化按鈕后就可以見到下圖3所示的效果了。
3 總結
通過對原有項目的內部窗口的重寫,用戶體驗得到了提高,筆者參與的企業(yè)進銷存項目獲得了客戶的充分肯定,文中關于JInternalFrame和JdesktopPane的使用要點,供大家探討。
參考文獻:
[1]Java 2 核心技術,卷I[M].Horstmann,葉乃文.北京:機械工業(yè)出版社,2006.
[2]使用JInternalFrame實現MDI[EB/OL].2008[2011-1-25].http://devbean.blog.51cto.com/.
[作者簡介]胡勝豐(1976-),男,湖南桃江人,碩士研究生,研究方向為信息化基礎軟件平臺和關鍵技術。