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