10.2 Swing程序包
AWT(Abstract Window Toolkit): 抽象窗口工具集。
依賴于本地操作系統(tǒng)的組件被稱為重量級(jí)(Heavy Weight)組件,因?yàn)樗鼈兌紩?huì)大量使用系統(tǒng)資源。
組件名稱有Frame(框架)、Button(按鈕)、Label(標(biāo)簽)等
Swing: 基于AWT類構(gòu)建。
幾乎所有的組件都用Java編寫,而且所有代碼都是Swing程序包的一部分。用Java語言編寫的組件稱為輕量級(jí)(Light Weight)組件。
組件名稱都以J開頭,如JFrame、JButton、JLabel等。
Swing程序包和AWT程序包都是Java基礎(chǔ)類(Java Foundation Class, JFC)中的一部分。
補(bǔ)充說明:首先輕量級(jí)與重量級(jí)是一個(gè)相對(duì)的概念,主要是對(duì)應(yīng)用框架使用方便性和所提供服務(wù)特性等方面做比較的。
輕量級(jí)組件都是純Java代碼開發(fā)的,具有良好的平臺(tái)移植性,不依賴于操作系統(tǒng)的支持,在所有的平臺(tái)上表現(xiàn)一樣,不直接使用操作系統(tǒng)的資源,
當(dāng)然操作系統(tǒng)的資源依然是要占用的,只是系統(tǒng)資源的管理都由組件完成,使用組件的程序員不直接與操作系統(tǒng)的資源打交道。
重量級(jí)組件則每個(gè)類都會(huì)與操作系統(tǒng)中的一個(gè)對(duì)等資源相對(duì)應(yīng)。
10.4 Java中的事件處理機(jī)制(event-handling)
事件處理器(event-handler)
自測題:
1。輕量級(jí)組件與重量級(jí)組件的不同。
依賴于本地操作系統(tǒng)的組件被稱為重量級(jí)組件,因?yàn)樗鼈兌紩?huì)大量使用系統(tǒng)資源。
全部使用Java語言編寫的組件稱為輕量級(jí)組件,它們透過AWT使用系統(tǒng)資源,不會(huì)直接管理系統(tǒng)資源。
2。布局管理器的作用
3。FlowLayout管理器與BorderLayout管理器的不同
4。
a) JFrame組件的布局策略
b) JPanel組件的布局策略
5。一個(gè)名為SomeClass的類具有兩個(gè)按鈕組件,這兩個(gè)按鈕組件被按下時(shí)將會(huì)采取特定的動(dòng)作。
a) 必要的import語句。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
b) 正確的頭部語句。
public class SomeClass extends JFrame implements ActionListener
c) 創(chuàng)建按鈕需要的Swing組件。
JButton
d) 對(duì)按鈕監(jiān)聽鼠標(biāo)單擊事件。
button1.addActionListener(this);
e) 哪個(gè)方法可以決定鼠標(biāo)單擊按鈕時(shí)采取行動(dòng)。
public void actionPerformed(ActionEvent e)
注: 實(shí)現(xiàn)可以參看PushMe.java
編程練習(xí):代碼附件
1. PushMe.java RunPushMe.java
2. ChangingFacesGUI.java
這個(gè)我用的是Swing Designer完成的界面設(shè)計(jì)+手工修改了部分代碼,
優(yōu)點(diǎn):比原始版本簡潔
缺點(diǎn):使用了anoynomous class,本書到這里還沒有講解;還用了enum類型,也是要到書的后面才講,這樣做就是為了更好的對(duì)比學(xué)習(xí)
3. MetricConverterGUI.java
實(shí)現(xiàn)了攝氏溫度與華氏溫度的轉(zhuǎn)換
最后加了兩個(gè)Panel是為了對(duì)齊前面的Panel
4. ReactorTesterGUI.java
也是采用Swing Designer完成的界面設(shè)計(jì),還增加了MessageBox的使用。
補(bǔ)充1:MessageBox需要一個(gè)父組件,而ReactorTesterGUI并沒有在構(gòu)造函數(shù)中實(shí)例化,所以不能使用。
而能使用的是contentPane,這個(gè)是在構(gòu)造函數(shù)中實(shí)例化了,并且在使用之前已經(jīng)聲明了。
父組件是為也確定MessageBox顯示的位置,結(jié)果是MessageBox會(huì)顯示在父組件的中間位置。
補(bǔ)充2:因?yàn)镽eactorTesterGUI在構(gòu)造函數(shù)中是無法實(shí)例化的,所以生成的組件并沒有直接放在frame的panel中,而是放在contentPane中。
contentPane是在ReactorTesterGUI的類中聲明了,再在構(gòu)造函數(shù)中用setContentPane(contentPane)來替換JFrame自己的rootPane。