參考文獻(xiàn):《Java瘋狂講義》(第三版)
Swing開(kāi)發(fā)圖形界面比AWT更優(yōu)秀
因?yàn)镾wing是一種輕量級(jí)組件胆绊,它采用100%的Java實(shí)現(xiàn),不再依賴于本地平臺(tái)的圖形界面,所以可以在所有的平臺(tái)上保持相同的運(yùn)行效果,對(duì)跨平臺(tái)的支持比較出色
此外笤受,Swing提供比AWT更多的圖形界面組件,因此可以開(kāi)發(fā)出更美觀的圖形界面敌蜂。
AWT需要調(diào)用底層平臺(tái)的GUI實(shí)現(xiàn)箩兽,所以AWT只能使用各種平臺(tái)上GUI組件的交集,這大大限制了AWT所支持的組件章喉。
Swing幾乎所有組件都采用了Java實(shí)現(xiàn)汗贫,所以無(wú)需考慮底層平臺(tái)是否支持該組件,因此Swing可以提供許多特殊容器和組件秸脱。
Swing組件都采用了MVC模式落包。
Swing的所有組件采用了Java實(shí)現(xiàn),不再調(diào)用本地平臺(tái)的GUI摊唇,導(dǎo)致Swing圖形界面的顯示速度要比AWT圖形界面顯示速度稍微慢一點(diǎn)咐蝇。
Swing的優(yōu)勢(shì):
1、Swing組件不再依賴于本地平臺(tái)的GUI巷查,無(wú)須采用各種平臺(tái)的GUI交集有序,因此Swing提供了大量圖形界面組件,遠(yuǎn)遠(yuǎn)超過(guò)了AWT所提供的圖形界面組建集
2岛请、Swing組件不再依賴于本地平臺(tái)GUI笔呀,因此不會(huì)產(chǎn)生與平臺(tái)相關(guān)的bug
3、Swing組件在各種平臺(tái)上運(yùn)行可以保證具有相同的圖形界面外觀
特點(diǎn):
1髓需、采用MVC模式
2许师、在各種平臺(tái)上保證一致
知識(shí)點(diǎn):
為菜單項(xiàng)指定快捷鍵時(shí)應(yīng)該使用大寫(xiě)字母來(lái)代表按鍵,例如 KeyStroke.getKeyStroke('N',InputEvent.CTRL_MASK)代表“Ctrl+N”松申,但KeyStroke.getKeyStroke('n',InputEvent.CTRL_MASL)不代表“Ctrl +N”
知識(shí)點(diǎn):
JFrame提供了一個(gè)getContentPane()方法云芦,這個(gè)方法用于返回該JFrame的頂級(jí)容器(即JRootPane對(duì)象),這個(gè)頂級(jí)容器會(huì)包含JFrame所顯示的所有非菜單組件贸桶。
即所有看似放在JFrame中的Swing組件舅逸,除了菜單外,其實(shí)都是放在JFrame對(duì)應(yīng)的頂級(jí)組件中的皇筛,而JFrame容器提供了個(gè)體ContentPane()方法返回的頂級(jí)容器琉历。
在Java5之前,Java甚至不允許向JFrame中添加組件,必須先調(diào)用JFrame的getContentPane()方法獲得該窗口的頂級(jí)容器旗笔,然后將所有組件添加到該頂級(jí)容器中彪置。
Java5以后,Java改寫(xiě)了JFrame的add()和setLayout()等方法蝇恶,當(dāng)程序調(diào)用JFrame的add()和setLayout()等方法時(shí)拳魁,實(shí)際上是對(duì)JFrame的頂級(jí)容器進(jìn)行操作。
知識(shí)點(diǎn):
為什么單擊Swing多行文本域時(shí)不是彈出像AWT多行文本域中的右鍵菜單撮弧?
這是由Swing組件和AWT組件實(shí)現(xiàn)機(jī)制不同決定的潘懊。
前面已經(jīng)之處,AWT的多行文本域?qū)嶋H上依賴于本地平臺(tái)的多行文本域想虎。簡(jiǎn)單地說(shuō)當(dāng)我們?cè)诔绦蛑蟹胖靡粋€(gè)AWT多行文本城卦尊,且該程序在Windows平臺(tái)上運(yùn)行時(shí),該文本域組件將和記事本工具編輯區(qū)具有相同的行為方式舌厨,因?yàn)樵撐谋居蚪M件和記事本工具編輯區(qū)的底層實(shí)現(xiàn)是一樣的岂却。
但Swing的多行文本域組件則是純Java的,它無(wú)須任何本地平臺(tái)的GUI支持裙椭,他在任何平臺(tái)上具有相同的行為模式躏哩,所以Swing多行文本域組件默認(rèn)是沒(méi)有右鍵菜單的,必須由程序員顯示的為它分配右鍵菜單揉燃。
而且Swing提供的JTextArea組件默認(rèn)沒(méi)有滾動(dòng)條(AWT的TextArea是否有滾動(dòng)條則取決于底層平臺(tái)的實(shí)現(xiàn))扫尺,為了讓該多行文本域具有滾動(dòng)條,可以將該多行文本域放到JscrollPane容器中炊汤。