摘要:Java Swing組件是早期AWT組件的升級版本,但也不能替代AWT,早期在java的GUl設(shè)計中,AWT未能達(dá)成跨平臺卻有統(tǒng)一風(fēng)格的界面設(shè)計。Swing由Java語言編寫而成,而lava語言本身不受操作系統(tǒng)影響,因此被稱為輕量級組件,可以在不同的平臺上達(dá)成統(tǒng)一的界面效果。Swing包的JComponent類繼承了awt包的Container類,所以大多組件都和容器相聯(lián)系,比如JFrame、JDialog、JPanel,這些類對象都需要轉(zhuǎn)換成容器,從而容納其他組件。該文從JFrame窗體人手,對容器極其相關(guān)設(shè)置做出分析。
關(guān)鍵詞:swing; awt; JFrame; JPanel; getContentPane0
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2020)21-0160-02
開放科學(xué)(資源服務(wù))標(biāo)識碼(OSID):
1 為Jframe對話框添加背景色
創(chuàng)建繼承Jframe的test類,在該類構(gòu)造函數(shù)中,初始化窗體的背景色。由于Jframe只是一個窗體框架,并不構(gòu)成一個容器,因此首先創(chuàng)建Container類變量,再調(diào)用getContentPane0將該類轉(zhuǎn)換成容器,通常在構(gòu)造函數(shù)中初始化容器,可以使用Container c=getContentPane0來完成。然后用該容器變量調(diào)用setBackground(Color.orange),設(shè)置窗體背景為橘色,在這里如果未設(shè)置容器,比如直接使用this.getContentPane0,就無法將顏色添加至窗體。接著設(shè)置窗體大小和可見性,直接調(diào)用父類方法java awt.component.setSize(int, int), java awt.component.setVisible(true)。最后在主函數(shù)中創(chuàng)建該類實例即可。代碼如圖1:
2 為Jframe窗體添加背景圖
實現(xiàn)該功能可通過將圖片裝載在JPanel面板上,然后在jframe容器中添加該jpanel面板。因為JPanel默認(rèn)僅設(shè)置背景顏色,無法設(shè)置圖片背景,所以通過重寫該類paintComponent(Graphics g)方法,使用g.drawlmage0將圖片畫人面板。
具體過程可在項目中新建兩個類:JFrame子類和JPanel子類。在JPanel子類中,該類構(gòu)造函數(shù)無法給面板加載背景圖片,因此使用Image類先將圖片放人內(nèi)存,在此過程中建立String類的字符串鏈接url,在寫url的時候,地址操作符使用”\\”,因為在lava中”\”表示轉(zhuǎn)義字符,如應(yīng)寫成:String url=”D:\\timg.jpg”。再通過Toolkit.getDefaultToolkitO.getlmage(url)獲取本地磁盤的圖片,Toolkit定義的部分方法可直接查詢本地操作系統(tǒng)。該方法組合可使用string類作為參數(shù),在此返回Image類對象。最后重寫JPanel類的paintComponent(Graphics g)方法,先調(diào)用父類paintComponent0,實現(xiàn)大部分背景設(shè)置功能,然后再加入添加背景圖片的功能,添加背景前,先獲取圖片寬度和高度,這兩個值使用intimh=im.getHeight(this)和intimw=im.get-Width(this)來實現(xiàn),注意,使用this作為參數(shù),是指的lmage類本身,用來獲取背景圖的寬和高,作為背景圖image的兩個屬性。在這里,如果不是用this作為參數(shù),比如使用null,都會導(dǎo)致無法顯示圖片。接下來調(diào)用圖形類方法drawlmage(im,0,0,null)(本例代碼),可以調(diào)整第2和第3個參數(shù),來顯示圖片特定部位。代碼如圖2:
下面在JFrame的子類中將窗體設(shè)置為容器,并將前面創(chuàng)建的JPanel面板添加進(jìn)容器中,在這里注意到Container類為頂級容器,它是置頂?shù)?,它里面可以添加二級容器,如JPanel面板,或JScrollpane。具體步驟是在該類構(gòu)造函數(shù)中,使用getCon-tentPane0將該類設(shè)置為容器,然后調(diào)用setSize(int,int)設(shè)置窗體大小,再創(chuàng)建jPanel對象,并將其添加至該容器,然后設(shè)置窗體可見,最后在主函數(shù)中創(chuàng)建該類對象。代碼如圖3:
參考文獻(xiàn):
[1]楊陽,基于Java Swing技術(shù)的學(xué)籍管理系統(tǒng)的設(shè)計與實現(xiàn)[Jl.福建電腦,2018(5):127-128.
[2]張會,基于Java的指法練習(xí)小游戲的設(shè)計與實現(xiàn)[Jl.電腦知識與技術(shù),2017,13(32):85-86,96.
[3]潘國榮.Java Swing下文件復(fù)制的實現(xiàn)方法[J].電腦知識與技術(shù),2019(33):37-38.
[4]陳硯雄.Java中Swing事件模型的應(yīng)用[J].文教資料,2005(21):36-37.
[5]張會.基于Java的記事本程序的設(shè)計與實現(xiàn).電腦知識與技術(shù),2017(30):88-90.
[6]王素蘋,一種基于Java Swing的網(wǎng)絡(luò)聊天室的設(shè)計與實現(xiàn)[J].現(xiàn)代計算機(jī)(專業(yè)版),2012(7):64-67.
[7]陳子豪.Java Swing下計算器的設(shè)計與實王見[J].科技創(chuàng)新導(dǎo)報,2017,14(32):111-112.
【通聯(lián)編輯:王力】
作者簡介:張丹丹(1981-),女,江蘇常州人,實驗師,工程碩士。