第05章 圖形用戶界面設計與事件處理
·本章學習目標了解如何創(chuàng)建GUI程序。
掌握使用常見布局管理器構建復雜的布局。
掌握事件類,事件接口和事件適配器。
了解組件的概念及組件的多種子類的用法。
掌握Swing組件的基本用法。
·本章學習內容
本章的主要內容是如何使用Java的組件構建圖形用戶界面(GUI),若要正確地設計圖形用戶界面,還要涉及到組件的布局與事件處理。本章要學習的知識點包括:
圖形用戶界面組件——AWT組件、Swing組件
容器的概念及用容器類
布局設計及幾種常見的布局管理器
GUI的事件處理
5.1 圖形用戶界面設計與AWT組件
Windows操作系統(tǒng)中使用的都是圖形用戶界面(GUI),要在Java中實現(xiàn)GUI,可通過如下過程來創(chuàng)建一個GUI元素:
(1)創(chuàng)建組件,如復選框、列表框、標簽等;
(2)確定其初始外觀;
(3)確定它應占一個特定位置還是任一缺省位置;
(4)將其添加至屏幕界面。
Java基本類庫(Java Fundation Class, JFC)是Java 2核心API的重要組成部分。它包括四個部分:Swing組件、Java 2D、拖放API和可訪問性API。
5.1.1 AWT組件
AWT(Abstract Window ToolKit,抽象窗口工具包)是一組用于設計GUI的Java庫函數(shù),位于java.awt包中。它包括以下內容:
(1)便于用戶輸出的一組豐富的界面組件;
(2)將組件放置到屏幕上適當位置的布局管理器;
(3)事件處理模型;
(4)圖形和圖像工具;
(5)和本地平臺剪貼板操作一起使用的幾個類。
5.1.2容器、組件和布局
組件是顯示在屏幕上并能和用戶進行交互的圖形對象。例如常見的命令按鈕、列表框、滾動條、位圖等都是組件,在使用時應該放在容器中。java.awt包中包含一個Component類。
容器是用來存放組件的區(qū)域,在容器上可以繪圖和著色。java.awt包中包含一個Container類。容器是用來存放組件的,而組件的位置擺放就要使用一些部件管理器來完成這個任務了。
5.1.3頂級容器Frame和中間容器Panel
1、窗體(Frame)
Frame窗體是獨立于Applet和瀏覽器的一個窗口,可以用作容器或組件。Frame類是Window類的子類,封裝了窗口中通用的一切組件,并且擁有標題欄、菜單欄、邊框和調整大小的角。
Frame類的構造方法如下:
Frame() //創(chuàng)建一個不含標題的標準窗口
Frame(String title) //創(chuàng)建標題名為title的標準窗口
【例1】使用Frame類創(chuàng)建一個窗體。
import java.awt.*;
class FrameDemo {
public static void main(String args[ ]){
Frame f = new Frame();
//Frame f = new Frame (“帶邊框的窗體”);
f.setSize(300,200);
f.setVisible(true);
}
}
2、面板(Panel)
Panel是包含在Frame中的一個區(qū)域,它是可以將許多組件組合起來的一種容器,也可看作是不含標題欄、菜單欄及邊框的窗口。Panel是Container類的一個子類,只是簡單的實現(xiàn)了Container類。通過構造方法Panel()即可創(chuàng)建面板。
【例2】創(chuàng)建一個面板。
import java.awt.*;
class PanelTest extends Panel {
public static void main(String args[ ]){
PanelTest p = new PanelTest();
Frame f = new Frame (“正在測試面板”);
f.add(p);
f.setSize(300,200);
f.setVisible(true);
}
}
5.2 布局管理器
組件在容器中擺放的方式叫做布局。在前面的程序中提及布局問題,實際是采用了一種默認的布局。本節(jié)介紹幾種常用的布局管理器。
5.2.1 FlowLayout布局
FlowLayout布局就是按行布局。組件按照添加的順序從左到右逐個擺放在容器上,排滿了一行再排下一行。Applet類和Panel類默認的布局就是FlowLayout。
創(chuàng)建FlowLayout布局使用的構造方法如表5-39所示。
FlowLayout布局的構造方法
構造方法 |
解釋 |
FlowLayout() |
創(chuàng)建一個默認的FlowLayout布局。具體的做法是以居中的方式,水平和豎直間距為5個單位 |
FlowLayout(int align) |
用參數(shù)align指定的對齊方式創(chuàng)建一個FlowLayout布局,水平和豎直間距為5個單位。align可取值為以下靜態(tài)常量: static int CENTER 居中 static int LEFT 左對齊 static int RIGHT 右對齊 |
FlowLayout(int align, int hgap, int vgap) |
用參數(shù)align指定的對齊方式,參數(shù)hgap指定的水平間距,參數(shù)vgap指定的豎直間距創(chuàng)建一個FlowLayout布局 |
5.2.2 GridLayout布局
GridLayout布局即網格布局,是將容器劃分為若干行列的網格,每一個格中放置一個組件,通常是從左到右、從上到下逐行放置的,若要改變放置的方向應當利用ComponentOrientation類來實現(xiàn)。放置時每一個組件的大小都是相同的,如果添加的個數(shù)少于網格的個數(shù),就會產生空白,如果添加的個數(shù)多于網格的個數(shù),系統(tǒng)會自動增加列數(shù)以滿足需要。
創(chuàng)建GridLayout布局使用的構造方法如表5-39所示。
GridLayout布局的構造方法
構造方法 |
解釋 |
public GridLayout() |
創(chuàng)建一個默認的GridLayout布局。具體的做法是添加的所有組件都占據僅有的一行 |
public GridLayout( int rows, int cols) |
用參數(shù)rows指定的行數(shù)和參數(shù)cols指定的列數(shù)創(chuàng)建一個GridLayout布局。如果兩個參數(shù)中有一個為0,則表示這個參數(shù)是任意個數(shù)的。但是二者不能同時為0,那樣會引起難料的后果 |
public GridLayout( int rows, int cols, int hgap, int vgap ) |
用參數(shù)rows指定的行數(shù)、參數(shù)cols指定的列數(shù)、參數(shù)hgap指定的水平間距和參數(shù)vgap指定的豎直間距創(chuàng)建一個GridLayout布局 |
【例】GridLayout應用。
import java.awt.*;
import java.swing.*;
public class GridEx{
public static void main(String args[]){
JFrame jf = new JFrame(“Grid Example”);
jf.setLayout(new GridLayout(2,2));
jf.add(new JButton(“1”)); jf.add(new JButton(“2”));
jf.add(new JButton(“3”)); jf.add(new JButton(“4”));
jf.setVisible(true);
}
}
5.2.3 GridBagLayout布局
GridBagLayout布局即網格包布局,是在GridLayout布局的基礎上改進發(fā)展而來的,只是比GridLayout布局更靈活,使用起來也要復雜一些。使用GridBagLayout布局涉及到GridBagLayout類和GridBagConstraints類兩個類。
GridBagLayout類和GridBagConstraints類的構造方法和常用成員方法見下頁。
GridBagLayout類的常用方法
構造方法 |
解釋 |
|
public GridBagLayout ( ) |
創(chuàng)建一個GridBagLayout布局 |
|
常用方法 |
解釋 |
|
public void setConstraints(Component comp, GridBagConstraints constraints) |
設置布局中參數(shù)comp指定的組件的約束條件為constraints |
GridBagLayout類的構造方法
構造方法 |
解釋 |
public GridBagConstraints () |
創(chuàng)建一個GridBagLayout布局的約束條件對象 |
成員變量 |
解釋 |
static int RELATIVE |
指定組件在行或列的方向上與最后一個組件或剛加入的組件相鄰 |
static int REMAINDER |
指定組件是行或列的方向上的最后一個組件 |
int fill |
fill成員變量規(guī)定填充方式,具體可取以下常量: GridBagConstraints.NONE 不改變組件的大小,此為默認值 GridBagConstraints.HORIZONTAL使組件的寬度變得足夠大以添滿水平方向的間隙,但不改變豎直方向的高度GridBagConstraints.VERTICAL使組件的高度變得足夠大以添滿豎直方向的間隙,但不改變水平方向的寬度GridBagConstraints.BOTH 使組件的寬度和高度都變得足夠大以添滿水平方向和豎直方向的間隙 |
int gridheight |
組件豎直方向上含有的格數(shù) |
int gridwidth |
組件水平方向上含有的格數(shù) |
5.2.4 BorderLayout布局
BorderLayout布局稱為邊界布局。具體的布局方法是把容器劃分成北north、南south、東east、西west、中center 共5個區(qū)域,向容器添加組件時用參數(shù)指明添加到哪個區(qū)域。如果某一個區(qū)域沒有添加組件,相鄰的組件將占據這一區(qū)域的位置,例如若北部沒有分配組件,則東、西、中部中的組件將向上延伸,占據北部的位置;若東、西部沒有分配組件則中部組件將向兩側延伸占據東、西部的位置。
BorderLayout布局的構造方法
構造方法 |
解釋 |
public BorderLayout() |
創(chuàng)建一個默認的BorderLayout布局,默認的水平間距和豎直間距都是0,即各個組件是彼此緊密相鄰的 |
public BorderLayout (int hgap, int vgap) |
用參數(shù)hgap指定的水平間距和參數(shù)vgap指定的豎直間距創(chuàng)建一個BorderLayout布局 |
5.2.5 CardLayout布局
CardLayout布局稱為卡片布局,它可以存儲不同的布局,每個布局就像一個卡片組中的一張卡片,每次總會有一張卡片在頂層。卡片通常為一個Panel對象。
實現(xiàn)CardLayout布局的步驟如下:
定義面板,為各面板設置不同的布局;
panelOne.setLayout(new FlowLayout());
panelTwo.setLayout(new GridLayout(2,1));
將主面板設置為CardLayout;
panelMain.setLayout(new CardLayout());
將各面板添加至主面板。
panelMain.add(“面板1”,panelOne);
panelMain.add(“面板2”,panelTwo);
5.2.6 null布局
null布局就是沒有布局,用戶可以充分利用Component類的setBounds方法自行布局,靈活性很大。
setBounds(int x, int y, int width, int height):移動組件并調整其大小。
5.3 Swing組件體系結構
由于AWT提供的GUI組件太有限且比較粗糙,開發(fā)大型的應用程序時不能滿足要求,同時效率比較低。
Swing有一個與平臺無關的實現(xiàn),Swing是AWT的擴展,它提供了許多新的圖形界面組件。Swing組件以"J"開頭,除了有與AWT類似的按鈕(JButton)、標簽(JLabel)、復選框(JCheckBox)、菜單(JMenu)等基本組件外,還增加了一個豐富的高層組件集合,如表格(JTable)、樹(JTree)。可以說Swing很大程度上取代了AWT來完成GUI的創(chuàng)建。下面詳細介紹Swing應用程序中常用的各種組件的用法。
5.3.1窗體JFrame
JFrame用于在Swing程序中創(chuàng)建窗體,它擴展了java.awt.Frame類。JFrame類的構造方法如下:
JFrame(); JFrame(String title);
在JFrame中添加組件的步驟:
先調用Container類的getContentPane()方法來產生一個Container對象;
然后使用Container對象的add()方法來添加組件。
【例3】在Swing組件中創(chuàng)建一個窗體窗口。
import java.awt.*;
import javax.swing.*;
public class FrameDemo extends JFrame {
public FrameDemo(String title) {
super(title);
}
public static void main(String args[ ]) {
FrameDemo fd = new FrameDemo(“JFrame 測試”);
fd.setVisible(true);
fd.setSize(300,200);
}
}
5.3.2面板JPanel
JPanel組件是中間容器,用于將輕量級組件組合在一起,JPanel對象的默認布局為FlowLayout。其構造方法如下:
JPanel(); JPanel(LayoutManager lm);
JPanel類的大部分方法都是派生自其父類:JComponent,Container和Component。
【例4】在Swing組件中加入一個JPanel窗口。
import java.awt.*;
import javax.swing.*;
public class PanelDemo extends JFrame {
public PanelDemo(String title) {
super(title);
Container c = getContentPane();
JPanel cpane = new JPanel();
JButton ok = new JButton(“確定”);
cpane.add(ok);
JButton cancel = new JButton(“取消”);
cpane.add(cancel);
c.add(cpane,BorderLayout.SOUTH);
}
public static void main(String args[ ]) {
PanelDemo pd = new PanelDemo(“JPanel測試”);
pd.setVisible(true);
pd.setSize(300,200);
}
}
5.3.3標簽JLabel
JLabel類是JComponent類的子類,它既可以顯示文本,也可以顯示圖像。其構造方法如下:
JLabel(); JLabel(Icon icon);icon表示使用的圖標。
JLabel(String text,Icon icon, int align);text表示使用的字符串;icon表示使用的圖標;align表示水平對齊方式,其值可以是LEFT、RIGHT和CENTER。
【例5】在Swing組件中加入一個JLabel標簽。
import java.awt.*;
import javax.swing.*;
public class PanelDemo extends JFrame {
public PanelDemo(String title) {
super(title);
Container c = getContentPane();
JPanel cpane = new JPanel();
JLabel my_label = new JLabel();
my_label.setText(“標簽測試”);
cpane.add(my_label);
c.add(cpane,BorderLayout.SOUTH);
}
}
5.3 Swing組件體系結構
public static void main(String args[ ]) {
PanelDemo pd = new PanelDemo(“標簽測試”);
pd.setVisible(true);
pd.setSize(300,200);
}
}
5.3.4按鈕JButton
JButton派生自javax.swing.AbstractButton類,JButton類允許用圖標,字符串或兩者同時構造一個按鈕。其構造方法如下:
JButton(); JButton(Icon icon);
JButton(String text,Icon icon);
Icon表示使用的圖標,text表示使用的字符串。按鈕上的文本可包含一個帶下劃線的字母,表明此按鈕的鍵盤快捷鍵。
【例6】JButton的用法。
import java.awt.*;
import javax.swing.*;
public class ButtonDemo extends JPanel {
JButton b1,b2;
public ButtonDemo() {
b1 = new JButton(“firstButton”);
b2 = new JButton(“secondButton”);
add(b1);
add(b2);
}
public static void main(String args[ ]) {
JFrame jf = new JFrame(“按鈕測試!”);
jf.getContentPane().add(new ButtonDemo());
jf.setSize(300,200);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE);
}
}
5.3.5文本組件
文本組件對GUI很重要,JTextComponent是所有Swing文本組件的根類。它包含JTextField組件、JTextArea組件、jPasswordField組件等。
1、JTextField——允許輸入或編輯單行文本。構造函數(shù)如下:
JTextField();
JTextField(Document doc, String text,int columns);
JTextField(int columns);
JTextField(String text);
JTextField(String text,int columns);
【例7】創(chuàng)建一個單行文本。
import java.awt.*;
import javax.swing.*;
public class TextFieldDemo extends JFrame {
public TextFieldDemo() {
Container con = getContentPane();
con.setLayout(new FlowLayout());
JLabel jl = new JLabel(“文本域”);
con.add(jl);
setSize(300,200);
setVisable(true);
}
public static void main(String args[ ]) {
new TextFieldDemo();
}
}
2、JTextArea——用于接收來自用戶的多行文本。它本身不處理滾動,但可以實現(xiàn)滾動界面,此界面允許被置于JScrollpane內部,并據此實現(xiàn)滾動。其構造方法如下:
JTextArea();
JTextArea(Document doc);
JTextArea(Document doc,String text,int rows,int cols);
JTextArea(int rows,int cols);
JTextArea(String text);
JTextArea(String text,int rows,int cols);
【例8】JTextArea對象的用法。
import java.awt.*;
import javax.swing.*;
public class TextAreaDemo extends JFrame {
public TextAreaDemo() {
Container con = getContentPane();
con.setLayout(new FlowLayout());
JLabel jl = new JLabel(“文本區(qū)”);
con.add(jl);
JTextArea ta = new JTextArea(5,10);
con.add(ta);
setSize(300,200);
setVisable(true);
}
public static void main(String args[ ]) {
new TextAreaDemo();
}
}
5.3.6復選框JCheckBox
JCheckBox是可以打開或關閉它以選擇某個選項的組件,用在Swing中創(chuàng)建復選框。其構造方法如下:
JCheckBox();
JCheckBox(Icon icon);
JCheckBox(Icon icon , Boolean selected);
JCheckBox(String text);
JCheckBox(String text , Boolean selected);
JCheckBox(String text,Icon icon);
JCheckBox(String text,Icon icon , Boolean selected);
5.3.6復選框JCheckBox
【例9】JCheckBox的用法。
5.3.7單選按鈕JRadioButton
一組單選按鈕用于顯示多個選項,但用戶只能選擇其中一個。ButtonGroup用于在Swing中創(chuàng)建這樣的組。其構造方法如下:
JRadioButton(); JRadioButton(Icon icon);
JRadioButton(Icon icon , Boolean selected);
JRadioButton(String text); JRadioButton(String text , Boolean selected);
JRadioButton(String text,Icon icon); JRadioButton(Action a);
JRadioButton(String text,Icon icon , Boolean selected);
【例10】 JRadioButton的用法。
import java.awt.*;
import javax.swing.*;
public class JRadioButtonDemo extends JFrame {
public JRadioButtonDemo() {
Container con = getContentPane();
con.setLayout(new FlowLayout());
JRadioButton jrb1 = new JRadioButton(“男”);
JRadioButton jrb2 = new JRadioButton(“女”);
ButtonGroup bg = new ButtonGroup();
con.add(new JLable(“性別”));
con.add(jrb1);
con.add(jrb2);
bg.add(jrb1);
bg.add(jrb2);
setSize(300,200);
setVisible(true);
}
public static void main(String args[ ]) {
new JRadioButtonDemo();
}
}
5.3.8列表JList
Swing提供了一個非常復雜的列表組件JList,編程時可以使用字符串列表,也可以使用任意對象構成的列表。其構造方法如下:
public JList(); 使用空模型構造Jlist
public JList(ListModel dataModel); 構造一個模型,讓它顯示制定模型中的元素
public JList(Object[ ] listData); 構造一個列表以顯示指定數(shù)組listData中的元素
【例10】JList的用法。
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
class AllStars extends JFrame implements ListSelectionListener {
String stars[ ] = {"成龍","劉德華","趙薇","劉若英","周華健"};
JList moviestars = new JList(stars);
JLabel lblask = new JLabel("您最喜歡哪位演員?");
JTextField jt = new JTextField(30);
public AllStars(String s) {
super(s);
JPanel p = (JPanel)getContentPane();
p.setLayout(new BorderLayout());
p.add("North",lblask);
moviestars.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
moviestars.setSelectedIndex(0);
moviestars.addListSelectionListener(this);
moviestars.setBackground(Color.lightGray);
moviestars.setForeground(Color.black);
p.setBackground(Color.white);
p.setForeground(Color.black);
p.add("Center",new JScrollPane(moviestars));
p.add("South",jt);
pack();
}
public static void main(String args[ ]) {
AllStars s = new AllStars("群星璀璨!");
s.setSize(400,400);
s.show();
}
public void valueChanged(ListSelectionEvent e) {
if (e.getValueIsAdjusting() == false) {
if (moviestars.getSelectedIndex() != -1) {
jt.setText((String)moviestars.getSelectedValue());
}
}
}
}
JList不支持滾動。為創(chuàng)建滾動列表,JList以JScorllPane實現(xiàn)。實現(xiàn)代碼如下:
JScorllPane myScorllPane = new JScorllPane();
myScorllPane.getViewport().setView(dataList);
或者
JScorllPane myScorllPane = new JScorllPane(dataList);
JList不提供處理鼠標雙擊或三擊的特殊支持,但是使用MouseListener很容易就可以處理這些事件。locationToIndex()方法用于確定單擊的單元。
5.3.9其他Swing組件
比較重要的Swing組件還有表格JTable、滾動條JScrollBar、樹JTree和菜單組件等等。其功能及使用方法與前面介紹的Swing組件基本類似,而且我們的NetBeans開發(fā)環(huán)境可以實現(xiàn)手動拖放組件,所以這里就不再具體介紹這些組件。
5.4 事件處理Event
5.4.1事件類AWTEvent
Java使用的是基于授權事件模型的事件處理方法,即一個源產生一個事件并把它送到一個或多個監(jiān)聽器,監(jiān)聽器只需等待,直到收到一個事件,監(jiān)聽器將處理這些事件,然后返回。
Java通過ActionEvent、WindowEvent等事件類處理事件。這些類的父類都是java.awt包中的AWTEvent類。AWTEvent類的層次結構。
java.lang.Object包 |
|||||
Java.untl.EventObject類 |
|||||
AWTEvent事件類 |
|||||
ActionEvent按鈕單擊事件 |
|||||
ComponentEvent組件事件 |
|||||
ContainerEvent容器事件 |
|||||
FocusEvent焦點事件 |
|||||
InputEvent輸入事件 |
|||||
KeyEvent鍵盤事件 |
|||||
MouseEvent鼠標事件 |
|||||
WindowEvent窗口事件 |
|||||
ItemEvent選擇事件 |
|||||
TextEvent文本框事件 |
對于每一個事件,在進行相應的處理時必須知道該事件是哪一個組件產生的,Java的EventObject類提供了getSource方法用于獲取產生事件的組件對象,而ActionEvent類提供了getActionCommand方法用于獲取產生事件的按鈕的標簽,下表是這兩個方法的語法格式。
事件處理的常用方法
常用方法 |
解釋 |
public Object getSource( ) |
獲取產生事件的組件 |
public String getActionCommand( ) |
獲取按鈕的標簽 |
在Java的java.awt.event包中,每個事件類都有一個對應的接口,并在接口中定義了若干個抽象的事件處理方法。若要接受并處理某一個事件類,必須實現(xiàn)相應的接口,這些接口名都是以Listener為后綴的。
根據Java對接口的規(guī)定,實現(xiàn)接口時必須重寫接口中的所有抽象方法,如果并不需要某一個方法,也要為該方法建立一個方法體為空的方法。
5.4.2事件類的接口interface
事件監(jiān)聽器(事件類) |
方法 |
說明 |
ActionListener單擊事件接口(ActionEvent單擊事件類) |
actionPerformed |
當一個操作事件發(fā)生時將調用此方法。 |
AdjustmentListener調整焦點事件接口(AdjustmentEvent調整事件類) |
AdjustmentValueChanged |
當發(fā)生調整事件時將調用此方法。 |
ComponentListener組件事件接口(ComponementEvent組件事件類) |
componentResized componentMoved componentshown componentHidden |
當組件改變大小、移動、顯示或隱藏時分別調用這些方法。 |
ContainerListener調整焦點事件接口(ContainerEvent調整事件類) |
componentAdded componentRemoved |
當將組件添加到容器時將調用上一方法,將組件從容器中刪除時將調用下一方法。 |
FocusListener調整焦點事件接口(FocusEvent調整事件類) |
FocusGained FocusLost |
當組件獲得鍵盤焦點時將調用上一方法,將組件失去鍵盤焦點時將調用下一方法。 |
ItemListener選擇事件接口(ItemEvent選擇事件類) |
itemStateChanged |
當單擊復選框或列表項,或項目狀態(tài)改變時調用此方法 |
KeyListener鍵盤事件接口 (KeyEvent鍵盤事件類) |
keyPressed keyReleased keyTyped |
當按下、釋放按鍵時分別調用前兩個方法;而輸入字符時將調用第三個方法 |
MouseListener鼠標按鈕事件接口(MouseEvent鼠標事件類) |
mouseClicked mouseEntered mouseExited mousePressed mouseReleased |
當按下并立即釋放鼠標時將調用第一個方法;鼠標進入、離開組件時將分別調用第二、三個方法;當按下、釋放鼠標時分別調用地四、五個方法 |
MouseMotionListener鼠標移動事件接口(MouseEvent鼠標事件類) |
mouseDragged mouseMoved |
當拖動或移動鼠標時 |
TextListener文本框事件接口(TextEvent文本框事件類) |
textValueChanged |
文本行或文本區(qū)中中的文本別修改時將調用此方法 |
WindowListener窗口事件接口(WindowEvent窗口事件類) |
windowOpened windowActivated windowDeactivated windowClosing windowClosed windowIconified windowDeiconified windowStateChanged |
當一個窗口被打開、激活、禁止、正在關閉、關閉、最小化、恢復、窗口狀態(tài)變化時依次調用這些方法 |
實現(xiàn)接口時必須重寫接口中的所有方法,這給編程帶來了不便。為此Java提供了事件適配器。事件適配器是一種特殊的類,都具有Adapter后綴,適配器實現(xiàn)了接口的所有方法,這樣在創(chuàng)建新類時就可以不實現(xiàn)接口,而是轉而繼承相應的適配器,繼承適配器以后,只需重寫用戶用到的方法。下表是接口與適配器的對應關系。
5.4.3事件適配器Adapter
事件接口 |
事件適配器 |
ComponentListener組件事件接口 |
ComponentAdapter組件事件適配器 |
ContainerListener容器事件接口 |
ContainerAdapter容器事件適配器 |
FocusListener焦點事件接口 |
FocusAdapter焦點事件適配器 |
KeyListener鍵盤事件接口 |
KeyAdapter鍵盤事件適配器 |
MouseListener鼠標按鈕事件接口 |
MouseAdapter鼠標按鈕事件適配器 |
MouseMotionListener鼠標移動事件接口 |
MouseMotionAdapter鼠標移動事件適配器 |
WindowListener窗口事件接口 |
WindowAdapter窗口事件適配器 |
·小結
由于用戶界面設計在程序設計中的重要地位,決定了本章內容的重要性。在本章中的重點是:組件類及其子類(按鈕組件、文本組件、標簽組件、復選框和單選鈕組、選擇框和列表框、滾動條等);事件類及其針對具體事件的子類,事件接口和事件適配器;容器類及其子類(框架類、面板類、對話框類等);布局類及其子類;顏色類和字體類;下拉菜單和彈出式菜單。posted on 2010-03-19 10:52 libifeng 閱讀(1181) 評論(0) 編輯 收藏 所屬分類: Java課件