介紹AWT和Swing組件
AWT和Swing 是 Java 設(shè)計(jì) GUI 用戶(hù)界面的基礎(chǔ)。與 AWT 的重量級(jí)組件不同,Swing 中大部分是輕量級(jí)組件。正是這個(gè)原因,Swing 幾乎無(wú)所不能,不但有各式各樣先進(jìn)的組件,而且更為美觀易用。所以一開(kāi)始使用 AWT 的程序員很快就轉(zhuǎn)向使用 Swing 了。
那為什么 AWT 組件沒(méi)有消亡呢?因?yàn)?Swing 是架構(gòu)在 AWT 之上的,沒(méi)有 AWT 就沒(méi)有 Swing。所以程序員可以根據(jù)自己的習(xí)慣選擇使用 AWT 或者是 Swing。但是,最好不要二者混用——除開(kāi)顯示風(fēng)格不同不說(shuō),還很可能造成層次 (Z-Order) 錯(cuò)亂,比如下例:
- importjava.awt.BorderLayout;
- importjava.awt.Button;
- importjavax.swing.JButton;
- importjavax.swing.JDesktopPane;
- importjavax.swing.JFrame;
- importjavax.swing.JInternalFrame;
- importjavax.swing.JPanel;
- publicfinalclassAwtSwing...{
- publicstaticvoidmain(String[]args)...{
- AwtSwingas=newAwtSwing();
- as.show();
- }
- JFrameframe=newJFrame("TestAWTandSWING");
- JDesktopPanejdp=newJDesktopPane();
- JInternalFramejif1=newJInternalFrame("controls");
- JInternalFramejif2=newJInternalFrame("cover");
- publicAwtSwing()...{
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- frame.getContentPane().add(jdp);
- jif1.setContentPane(newJPanel());
- jif2.setContentPane(newJPanel());
- jif1.getContentPane().setLayout(newBorderLayout());
- jif1.getContentPane().add(newButton("AWTButton"),BorderLayout.WEST);
- jif1.getContentPane().add(newJButton("SwingButton"),
- BorderLayout.EAST);
- jif1.setSize(200,100);
- jif2.setSize(200,100);
- jdp.add(jif1);
- jdp.add(jif2);
- frame.setSize(240,140);
- }
- publicvoidshow()...{
- frame.setVisible(true);
- jif1.setVisible(true);
- jif2.setVisible(true);
- }
- }
運(yùn)行這個(gè)程序,并用鼠標(biāo)拖動(dòng)那個(gè)名為“cover”的子窗口,我們會(huì)發(fā)現(xiàn)一個(gè)非常有趣的現(xiàn)象,如圖:

顯然 cover 子窗口是在 controls 子窗口之上的,但是它只罩蓋住了 Swing Button,沒(méi)有罩蓋住 AWT Button。再看一會(huì)兒,你是不是有這樣一種感覺(jué):Swing Button 是“畫(huà)”上去的,而 AWT Button 則是“貼”上去的。這就是二者混用造成層次錯(cuò)亂的一個(gè)例子。
Swing組件有美觀、易用、組件量大等特點(diǎn),也有缺點(diǎn)——使用 Swing組件的程序通常會(huì)比使用 AWT 組件的程序運(yùn)行更慢。但是大家都還是更喜歡用 Swing組件,原因何在?因?yàn)殡S著計(jì)算機(jī)硬件的升級(jí),一點(diǎn)點(diǎn)速度已經(jīng)不是問(wèn)題。相反的,用戶(hù)更需要美觀的用戶(hù)界面,開(kāi)發(fā)人員則更需要易用的開(kāi)發(fā)組件。
【編輯推薦】