java圖形界面程序設(shè)計補充講稿.doc
《java圖形界面程序設(shè)計補充講稿.doc》由會員分享,可在線閱讀,更多相關(guān)《java圖形界面程序設(shè)計補充講稿.doc(31頁珍藏版)》請在裝配圖網(wǎng)上搜索。
圖形界面程序設(shè)計Part I:界面設(shè)計使用圖形組件類和容器類進行GUI設(shè)計時,需要引入相應的包或者類。在Java 中,能夠?qū)崿F(xiàn)圖形用戶界面的類庫有兩個:java.awt 和javax.swing。前者稱為抽象窗口工具庫AWT(Abstract Windows Toolkit),后者是Java 基礎(chǔ)類庫JFC(Java Foundation Classes)的一個組成部分,它提供了一套功能更強、數(shù)量更多、更美觀的圖形用戶界面組件。Swing 組件名稱和AWT 組件名稱基本相同,但以J 開頭,例如AWT 按鈕類的名稱是Button,在Swing 中的名稱則是JButton。在java中,AWT包中的類是用來處理圖形的最基本的方式,它是Sun公司早期所推出和使用的圖形組件包,其中的組件包含基本GUI組件類、容器類、布局管理類,事件處理類和基本圖形類這五種。AWT包中的組件被認為是重量級組件,AWT在實際運行中是調(diào)用所在平臺的圖形系統(tǒng),它們依賴于本地系統(tǒng)來支持繪圖與顯示,其運行速度慢效果差,系統(tǒng)相關(guān)性較強。在1998年Sun Microsystem推出JDK1.2版本時,新的javax.Swing包被增加到java的基礎(chǔ)類庫中。Swing包可以認為是AWT包的升級。它不僅擁有幾倍于AWT包的用戶界面組件,而且同樣的組件,Swing包中的組件往往可設(shè)置屬性更多,功能更強大豐富。例如Swing包中按鈕(Button)的功能較AWT包中的按鈕功能更加強大,包括給按鈕添加圖像、使用快捷鍵以及設(shè)置按鈕的對齊方式,還可以給按鈕加入圖片做背景。Swing采用MVC(模型-視圖-控制)的設(shè)計范式,使程序員可以根據(jù)不同的操作系統(tǒng)來選擇不同的外觀。Swing組件完全是用Java代碼實現(xiàn)的,可以跨平臺,使用Swing組件的程序在Mac、Windows或Unix平臺上的觀感都一樣。Swing組件通常被稱為輕量級組件。程序設(shè)計過程中最好不要混用Swing組件和AWT組件,雖然有時候也可以同時用,但有可能在視覺效果和響應上造成不穩(wěn)定隱患。AWT包中常用的頂層容器為Frame、Dialog、Applet,中間層容器為Panel(中間層容器是一種可以放到頂層容器上的組件,它可以把頂層容器進行進一步的區(qū)域劃分以設(shè)計所需格局的界面)。常用的普通組件有Button、TextField、TextArea、Label、List等。Swing包中的組件分類主要為:(1)頂層容器:JFrame、JApplet、JDialog。(2)中間層容器:JPanel、JScrollPane、JSplitPane、JToolBar。(3)其它基本組件:JButton、JList、JTextField等。關(guān)于布局,其實每種容器都有默認的布局,當設(shè)計者沒有指定使用另外的布局時,放到它上面的組件就會按默認布局方式擺放。在AWT和Swing中都可對容器設(shè)置布局,都是調(diào)用容器對象的setLayout方法。布局有幾種,這里作簡單說明,具體請大家從示例程序的運行以及JDK API文檔中查閱這些布局類的說明文檔來體會:(1)FlowLayout布局:順序布局,有時又稱流式布局。使用該布局時,容器上的元素會按容器顯示時的大小,按照從左到右、從上倒下的一行一行擺放下去。(2)BorderLayout布局:邊界布局。它可以把容器分為東西南北中5個方位,可以指定某個組件在哪個方位(但注意并非一定要有5個組件擺上去,不足5個也可指定位置擺放)。(3)GridLayout布局:網(wǎng)格布局??梢灾付ㄈ萜魃系脑匕磶仔袔琢械奈恢庙樞驍[放。(4)CardLayout布局:卡片布局。使用該布局的容器可放置多個組件,但同一時刻只能顯示其中一個,就像一疊疊整齊的紙牌中每次只能最上面一張一樣??梢灾付膫€組件被顯示。(5)null布局:空布局??詹季植⒎菦]有布局,而是容器被設(shè)置為這種布局以后,放到它上面的每個組件就可以通過setBounds(int a,int b,int width,int height)來設(shè)置其具體的位置。(6)另外還有BoxLayout(盒式布局)、GridBagLayout(網(wǎng)格包布局)等不常用布局。 在具體的程序設(shè)計時,上述每一種布局都對應是一個類,用它們定義出來的對象作為容器對象的setLayout方法的參數(shù),就可以把容器設(shè)置成該參數(shù)所對應的布局了。仔細閱讀、體會、運行和模仿學習后面的多個例子程序(注意代碼注釋中所提示的各種細節(jié)問題),我們可以最后再次總結(jié)出“界面設(shè)計”的步驟:(1)定義頂層容器對象。 (2)用容器對象的setLayout方法給容器設(shè)置一種布局。 (3)定義普通圖形組件。 (4)調(diào)用容器對象的add方法將普通圖形組件添加到容器上。 其中步驟(1)和(3)一般放在圖形界面程序類的成員變量聲明部分。(2)和(4)一般放在類的構(gòu)造函數(shù)部分。 最后在main函數(shù)中生成圖形界面程序類的實例運行,顯示出界面來。 /* 例子3.1,關(guān)于容器Frame的使用。*/import java.awt.Frame;public class FrameApp public static void main(String args) Frame frame=new Frame(); /定義一個Frame容器對象frameframe.setSize(200,100);frame.setVisible(true); /注意Frame對象默認是不可見的,嘗試注釋掉此句,你會發(fā)現(xiàn)看 /不到運行結(jié)果的窗口出現(xiàn)。/* * 例子3.2,關(guān)于容器JFrame的使用。 同上例。 */import javax.swing.JFrame;public class JButtonApp public static void main(String args) JFrame jframe = new JFrame(); / 定義一個JFrame容器對象jframejframe.setSize(200, 100);jframe.setVisible(true);/ 注意JFrame對象默認是不可見的,若注釋掉此句,你會發(fā)現(xiàn)看/ 不到運行結(jié)果的窗口出現(xiàn)。jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/JFrame表面上可以關(guān)閉,/ 實際上只是被隱藏為不顯示。要真正可以關(guān)閉它,必須讓JFrame對象/ 調(diào)用setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)這樣的方法來實現(xiàn)關(guān)閉功能。/* * 例子3.3,本例演示使用容器JFrame,設(shè)計一個基本的圖形界面程序的過程和方法。請注意注釋 * 所提示的一些應該注意的細節(jié)問題。 */import java.awt.FlowLayout;import java.awt.Font;import java.awt.Color;import javax.swing.JButton;import javax.swing.JFrame;public class JButtonAppJFrame jf=new JFrame(); /定義設(shè)計圖形界面程序所需的容器對象JButton button1=new JButton(按鈕1); /定義界面上需要的按鈕button1,以下類似JButton button2=new JButton(按鈕2);JButton button3=new JButton(按鈕3);public JButtonApp() /一般總是用構(gòu)造函數(shù)用于把普通組件添加到容器上構(gòu)造出界面來!jf.setLayout(new FlowLayout();/當沒有使用任何布局的時候,JFrame容器只會顯示代碼中最 /后使用add方法添加上去的組件。假如這條設(shè)置布局的語句被 /注釋掉的話,程序運行后界面上將會只顯示按鈕3這一個按鈕 jf.getContentPane().add(button1);/往容器上面添加按鈕button1。注意如果是往AWT中的Frame /容器對象上面添加任何組件的話,都是調(diào)用該對象的add方 /法,以組件對象名作為參數(shù)添加即可。但對于Swing中的 /JFrame,必須先通過getContentPane()方法獲取其內(nèi)容面 /板,然后再調(diào)用add方法添加組件。jf.getContentPane().add(button2);jf.getContentPane().add(button3);jf.getContentPane().setBackground(Color.RED); /把jf的背景色設(shè)置為紅色。button1.setFont(new Font(隸書,Font.PLAIN,20); /給按鈕button1設(shè)置字體。jf.setVisible(true);/JFrame容器對象默認是不可見的,必須要設(shè)置為可見,界面才會出來。jf.pack(); /如果嘗試不調(diào)用pack函數(shù),默認出來的界面不會顯示全部組件。pack的作用是使 /界面上的所有組件以最經(jīng)濟的方式全部顯示出來。public static void main(String args) JButtonApp jba=new JButtonApp(); /生成對象實例,在此過程中構(gòu)造函數(shù)會被調(diào)用 /運行,界面即出現(xiàn)/* 例子3.4,本例演示容器Applet的使用。*/import java.applet.Applet;import javax.swing.JTextField;public class JTextFieldApp extends Applet /這是一個Applet程序,Applet實際上也是一種容器!JTextField jtxtfld1,jtxtfld2; /定義兩個JTextField類型的組件public void init()jtxtfld1=new JTextField(20); /生成對象實例jtxtfld2=new JTextField(20);add(jtxtfld1); /將組件添加到容器Applet上add(jtxtfld2); jtxtfld2.setEditable(false); /將其中的jtxtfld2設(shè)置為不可編輯的,即不能往里輸入東西/* 例子3.5,本例演示FlowLayout布局(順序布局)的使用。這種布局就是按照調(diào)用add方法添加組件的順序* 從左到右、從上到下擺放組件,下面的程序中的5個按鈕就是按照這樣布局的。*/import java.awt.*;import java.awt.event.*;public class FlowLayoutApp extends Frame /這個例子程序不是在程序中定義Frame容器對象作為 /容器,而是繼承自Frame類。這隱含著是以Frame作 /為頂層容器。public FlowLayoutApp() /構(gòu)造函數(shù)super(An FlowLayout Example); /調(diào)用父類的構(gòu)造函數(shù)設(shè)置頂層容器的標題setLayout(new FlowLayout();setBackground(Color.green); /以綠色作為界面的背景色setVisible(true); /容器設(shè)置為可見add(new Button(按鈕1); /添加一個按鈕到容器上面add(new Button(按鈕2); add(new Button(按鈕3); add(new Button(按鈕4); add(new Button(按鈕5); pack(); /使界面上的元素在程序一運行之后,就全部顯示出來。public static void main(String args)FlowLayoutApp fla=new FlowLayoutApp(); /生成對象實例/* * 例子3.6,本例演示BorderLayout布局(邊界布局)的使用。這種布局會把容器上的組件按照 * 東西南北中各個方位進行排列??梢酝ㄟ^參數(shù)具體指定某個組件在東西南北中的哪一個方向。 * 通過這種布局,可以把容器細分為幾個部分,以便設(shè)置更好的界面。請注意并不是一定要東 * 西南北中五個方向都要放組件的。不足五個的組件同樣可以分別被指定放在容器上東西南北 * 中的任何一個方位。自己可以嘗試放置少于五個組件的情況。 */import javax.swing.JButton;import javax.swing.JFrame;public class BorderLayoutAppJFrame jf;JButton eastButton;JButton southButton;JButton westButton;JButton northButton;JButton centerButton;public BorderLayoutApp()jf=new JFrame(這是一個演示BorderLayout布局的例子程序);eastButton=new JButton(東按鈕);southButton=new JButton(南按鈕);westButton=new JButton(西按鈕);northButton=new JButton(北按鈕);centerButton=new JButton(中央按鈕);jf.add(eastButton,East); /注意:Frame容器的默認布局就已經(jīng)是BorderLayoutjf.add(southButton,South);jf.add(westButton,West); jf.add(northButton,North);jf.add(centerButton,Center);jf.setVisible(true);jf.pack();public static void main(String args)BorderLayoutApp bla=new BorderLayoutApp();/*例子3.7,本例演示null布局(順序布局)的使用。有時會用到null布局(即無布局管理器),程序員必須自己為容器中的組件設(shè)置大小和位置,因此其好處是可以隨心所欲地設(shè)置組件的大小和位置得到自己想要的布局,但跨平臺使用時,界面可能發(fā)生變化,且程序編寫和調(diào)試相對比較繁瑣,示例如下。*/import javax.swing.JButton;import javax.swing.JFrame;public class NullLayoutAppJFrame jfr=new JFrame(null布局的使用示例);JButton b1=new JButton(open);JButton b2=new JButton(close);JButton b3=new JButton(ok);public NullLayoutApp() /構(gòu)造函數(shù),用于生成圖形程序的界面jfr.setSize(300,300); /設(shè)置容器對象jfr的寬度和高度jfr.setLayout(null); /設(shè)置為null布局。注意null四個字母全部小寫!b1.setSize(80,20); /設(shè)置按鈕b1的寬度和高度b1.setLocation(10,30); /設(shè)置按鈕b1在界面上的左上角的位置坐標b2.setSize(90,40);b2.setLocation(40,60);b3.setSize(100,50);b3.setLocation(100,80);jfr.add(b1); /依次將每個組件添加到容器上jfr.add(b2);jfr.add(b3);jfr.setResizable(true);jfr.setVisible(true);/jfr.pack(); 注意:使用null布局之后,pack方法反而不需要使用了!public static void main(String args)NullLayoutApp nla=new NullLayoutApp(); /定義對象實例,調(diào)用構(gòu)造函數(shù)生成界面Swing的一些應用示例1、 Swing和AWT的區(qū)別2、 容器類:JFrame、JApplet、JDialog、JComponent普通組件類:JButton、JTextField、JTextArea、JLabel。輔助類:Color、Font、LayoutManager。下面的例子都將基于Swing。3、 創(chuàng)建一個框架import javax.swing.JFrame;public class MyFramepublic static void main(String args) JFrame frame = new JFrame(我的第一個界面);frame.setSize(400, 300);frame.setLocationRelativeTo(null);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);4、 向框架中添加組件:import javax.swing.JButton;import javax.swing.JFrame;public class MyFramepublic static void main(String args) JFrame frame = new JFrame(我的第一個界面);JButton button= new JButton(按鈕);frame.add(button); /JDK5之后允許直接如此調(diào)用將組件放在內(nèi)容面板中frame.setSize(400, 300);frame.setLocationRelativeTo(null);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);5、 布局管理器,此例開始盡量將界面設(shè)計放在構(gòu)造函數(shù)中,便于類被復用等。/先看一個FlowLayout的例子import java.awt.BorderLayout;import java.awt.FlowLayout;import java.awt.GridLayout;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JTextField;public class MyFrame extends JFrameMyFrame()setLayout(new FlowLayout(FlowLayout.LEFT,10,20);add(new JLabel(學號:);add(new JTextField(8);add(new JLabel(性別);add(new JTextField(2);add(new JLabel(姓名:);add(new JTextField(8);public static void main(String args) MyFrame frame = new MyFrame();frame.setSize(400, 300);frame.setLocationRelativeTo(null);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);6、 GridLayout,寫一個例子或改改上例試試看? 行數(shù)列數(shù)不能同時為0. 行列都不為0的情況下,行數(shù)是主導參數(shù)。7、 BorderLayout,寫一個例子測試看看。8、 用JPanel(面板)作為子容器細化界面設(shè)計:import java.awt.*;import javax.swing.*;public class TestPanels extends JFrame public TestPanels() / Create panel p1 for the buttons and set GridLayout JPanel p1 = new JPanel(); p1.setLayout(new GridLayout(4, 3); / Add buttons to the panel for (int i = 1; i = 9; i+) p1.add(new JButton( + i); p1.add(new JButton( + 0); p1.add(new JButton(Start); p1.add(new JButton(Stop); / Create panel p2 to hold a text field and p1 JPanel p2 = new JPanel(new BorderLayout(); p2.add(new JTextField(Time to be displayed here), BorderLayout.NORTH); p2.add(p1, BorderLayout.CENTER); / add contents into the frame add(p2, BorderLayout.EAST); add(new JButton(Food to be placed here), BorderLayout.CENTER); /* Main method */ public static void main(String args) TestPanels frame = new TestPanels(); frame.setTitle(The Front View of a Microwave Oven); frame.setSize(400, 250); frame.setLocationRelativeTo(null); / Center the frame frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); 9、 Color類如 : Color color = new Color(128,100,100);import java.awt.BorderLayout;import java.awt.Color;import java.awt.FlowLayout;import java.awt.GridLayout;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JTextField;public class MyFrame extends JFrameMyFrame()setLayout(new FlowLayout(FlowLayout.LEFT,10,20);JButton button = new JButton(按鈕);add(new JLabel(學號:);add(new JTextField(8);add(new JLabel(性別);add(new JTextField(2);add(new JLabel(姓名:);add(new JTextField(8);Color color = new Color(150,100,100); button.setBackground(color); /或改成RED試試?button.setForeground(Color.blue);add(button);public static void main(String args) MyFrame frame = new MyFrame();frame.setSize(400, 300);frame.setLocationRelativeTo(null);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);10、 Font類public Font(String name, int style, int size);import java.awt.BorderLayout;import java.awt.Color;import java.awt.FlowLayout;import java.awt.Font;import java.awt.GridLayout;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JTextField;public class MyFrame extends JFrameMyFrame()setLayout(new FlowLayout(FlowLayout.LEFT,10,20);JButton button = new JButton(按鈕);add(new JLabel(學號:);add(new JTextField(8);add(new JLabel(性別);add(new JTextField(2);add(new JLabel(姓名:);add(new JTextField(8);Color color = new Color(150,100,100); button.setBackground(color); /或改成RED試試?button.setForeground(Color.blue);Font font = new Font(黑體,Font.PLAIN,22); /字體設(shè)置button.setFont(font);add(button);public static void main(String args) MyFrame frame = new MyFrame();frame.setSize(400, 300);frame.setLocationRelativeTo(null);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);11、看點GUI組件的一些其它普遍特性,比如給面板設(shè)置邊界,給按鈕設(shè)置提示(鼠標放上去會有提示):import java.awt.BorderLayout;import java.awt.Color;import java.awt.FlowLayout;import java.awt.Font;import java.awt.GridLayout;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTextField;import javax.swing.border.TitledBorder;public class MyFrame extends JFrameMyFrame()setLayout(new FlowLayout(FlowLayout.LEFT,10,20);JPanel jp = new JPanel(new FlowLayout(); /在上例基礎(chǔ)使用面板JButton button = new JButton(按鈕);jp.add(new JLabel(學號:);jp.add(new JTextField(8);jp.add(new JLabel(性別);jp.add(new JTextField(2);jp.add(new JLabel(姓名:);jp.add(new JTextField(8);add(jp);jp.setBorder(new TitledBorder(一些組件放在本JPanel中);/給面板設(shè)置邊界button.setToolTipText(請點擊本按鈕繼續(xù)); /鼠標放到按鈕上會有提示Color color = new Color(150,100,100); button.setBackground(color); /或改成RED試試?button.setForeground(Color.blue);Font font = new Font(黑體,Font.PLAIN,22); /字體設(shè)置button.setFont(font);add(button);public static void main(String args) MyFrame frame = new MyFrame();frame.setSize(400, 300);frame.setLocationRelativeTo(null);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);12、其實上面所說的顏色、邊界、鼠標提示等是一般GUI組件都有的特性。比如下例在上面的例子基礎(chǔ)上給一個添加進去的JTextField也增加了提示。import java.awt.BorderLayout;import java.awt.Color;import java.awt.FlowLayout;import java.awt.Font;import java.awt.GridLayout;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTextField;import javax.swing.border.TitledBorder;public class MyFrame extends JFrameMyFrame()setLayout(new FlowLayout(FlowLayout.LEFT,10,20);JPanel jp = new JPanel(new FlowLayout(); /在上例基礎(chǔ)使用面板JButton button = new JButton(按鈕);JTextField jt = new JTextField(16); /在上例基礎(chǔ)上增加文本框jp.add(new JLabel(學號:);jp.add(new JTextField(8);jp.add(new JLabel(性別);jp.add(new JTextField(2);jp.add(new JLabel(姓名:);jp.add(new JTextField(8);add(jp);jp.setBorder(new TitledBorder(一些組件放在本JPanel中);/給面板設(shè)置邊界button.setToolTipText(請點擊本按鈕繼續(xù)); /鼠標放到按鈕上會有提示Color color = new Color(150,100,100); button.setBackground(color); /或改成RED試試?button.setForeground(Color.blue);Font font = new Font(黑體,Font.PLAIN,22); /字體設(shè)置button.setFont(font);add(button);jt.setToolTipText(請在此輸入內(nèi)容); /給文本框設(shè)置提示內(nèi)容add(jt);public static void main(String args) MyFrame frame = new MyFrame();frame.setSize(400, 300);frame.setLocationRelativeTo(null);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);13、圖像圖標(先得準備一點測試用的圖片)ImageIcon icon = new ImageIcon(“image/pic.gif”);import javax.swing.*;import java.awt.*;public class TestImageIcon extends JFrame private ImageIcon usIcon = new ImageIcon(image/us.gif); private ImageIcon myIcon = new ImageIcon(image/my.jpg); private ImageIcon frIcon = new ImageIcon(image/fr.gif); private ImageIcon ukIcon = new ImageIcon(image/uk.gif); public TestImageIcon() setLayout(new GridLayout(1, 4, 5, 5); add(new JLabel(usIcon); add(new JLabel(myIcon); add(new JButton(frIcon); add(new JButton(ukIcon); /* Main method */ public static void main(String args) TestImageIcon frame = new TestImageIcon(); frame.setTitle(TestImageIcon); frame.setSize(500, 125); frame.setLocationRelativeTo(null); / Center the frame frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); 14、更多其它組件應用和測試:JList、JComboBox、JCheckBox、JRadioButton、JScrollBar等圖形界面程序設(shè)計Part II:事件處理15、事件 和 事件源事件:點擊按鈕、鍵盤輸入、鼠標移動。事件源:如按鈕等。圖形界面程序是事件驅(qū)動的,當用戶與程序之間交互時產(chǎn)生事件,觸發(fā)程序中的事件處理代碼。事件一般分為用戶事件和系統(tǒng)事件。通常關(guān)注比較多的是用戶事件。典型的交互和要處理的用戶事件包括用戶移動鼠標、單擊鼠標,點擊按鈕、點擊下拉列表框或選項卡、在文本框中輸入內(nèi)容后回車、點擊菜單項或關(guān)閉圖形窗口等。事件處理,處理的是誰的事件?實際上處理的就是界面上的組件的事件。比如被點擊的按鈕,被輸入內(nèi)容后按下了回車鍵的單行文本框等等。事件的處理并非自動完成。事件發(fā)生后,應該產(chǎn)生什么結(jié)果,其實完全是由程序設(shè)計者所設(shè)計的代碼來決定由每一行具體的程序代碼來指定在事件發(fā)生后,界面上的各個組件產(chǎn)生什么顯示結(jié)果,或者產(chǎn)生什么改變。Java事件處理的機制是產(chǎn)生一個事件的對象必須設(shè)定其事件處理的監(jiān)聽者對象(Listener)。當事件發(fā)生時,監(jiān)聽者便會依據(jù)事件的類型來執(zhí)行相應的程序。要處理一個對象所產(chǎn)生的事件,首先必須注冊該對象的監(jiān)聽者。Java.awt.event包中按照不同的事件類型定義了11個監(jiān)聽器接口,每類事件都有對應的事件監(jiān)聽器,監(jiān)聽器實際上就是接口,接口中定義了事件發(fā)生時可調(diào)用的、必須要實現(xiàn)的方法,一個類可實現(xiàn)監(jiān)聽器的一個或多個接口。與AWT事件有關(guān)的所有事件都是由java.awt.AWTEvent類派生而來的。系統(tǒng)對事件進行了分類。每一種事件用一種系統(tǒng)定義好的系統(tǒng)類來表示。不同的組件會對應產(chǎn)生不同的事件,也就對應到不同的事件類。而每一種事件類,又對應要實現(xiàn)(implements)不同的接口。而每一個接口中,又有一個或者多個方法必須要被實現(xiàn)(這也是接口被implements時的語法要求),這些方法中的代碼,就是對應的事件的具體的處理代碼。常見的AWT事件以及與其關(guān)聯(lián)的組件如下表所示,Swing也是類似的。另外,由于監(jiān)聽器實際上就是實現(xiàn)了相應接口的類,而接口一般要求實現(xiàn)許多方法,如接口WindowListener中有7個方法,并不是所有方法都是需要的,但接口卻要求實現(xiàn)其所有的方法。為了簡化,java語言為一些接口統(tǒng)一提供了事件適配器(Adapter)。事件適配器是抽象類。通過繼承事件適配器,重寫需要的方法,不要的方法可以不寫。例如Java.awt.event包中提供了以下幾個事件適配器:ComponentAdapter組件適配器,ContainerAdapter容器適配器,F(xiàn)ocusAdapter焦點適配器,KeyAdapter鍵盤適配器,MouseAdapter鼠標適配器,MouseMotionAdapter鼠標移動適配器,WindowAdapter窗口適配器。表4-1 常見的AWT事件及其關(guān)聯(lián)組件、接口、方法事件類可關(guān)聯(lián)的組件要實現(xiàn)的接口接口中必須實現(xiàn)的方法ActionEventButton,List,MenuItem,TextFieldActionListenerActionPerformed(Actionevent e)ItemEventCheckbox,Choice,List,MenuItemItemListenerItemStateChanged(ItemEvent eContainerEventContainer,Dialog,Frame,Panel,ScrollPane,WindowContainerListenercomponentAdded(ContainerEvent e)componentRemoved()MouseMotionEventButton,Canvas,Checkbox,choice,Component,Container,Dialog,Frame,Label,List,Panel,Scrollbar,ScrollPane,TextArea,TextField,WindowMouseMotionListenermouseGragged(MouseEvent e)mouseMoved(MouseEvent e)MouseEvent同MouseMontionEventMouseListenermousePressed(MouseEvent e)mouseReleased()mouseEntered()mouseExited()mouseClicked()KeyEvent同MouseMontionEventKeyEventkeyPressed(KeyEvent e)keyReleased()keyTyped()FocusEvent同MouseMontionEventFocusListenerfocusGained(FocusEvent e)focusLost(FocusEvent e)AdjustmentEventScrollbarAdjustmentListeneradjustmentValueChanged(AdjustmentEvent e)ComponentEvent同MouseMontionEventComponentListenerComponentMoved(ComponentEvent e)ComponentHidden()ComponentResized()ComponentShown()TextEventTextField,TextAreaTextListenertextValueChanged(TextEvent e)WindowEventDialog,Frame,WindowWindowListenerWindowClosing(WindowEvent e)WindowOpened()WindowIconified()WindowClosed()WindowDeiconfied()WindowActivated()WindowDeactivated()總結(jié)一下,圖形界面程序設(shè)計中的事件處理的步驟是:首先要讓可能產(chǎn)生事件的組件對事件進行監(jiān)聽,那么就要實現(xiàn)監(jiān)聽器接口,實現(xiàn)(implements)了接口的話,就必須要實現(xiàn)接口中所有的方法(這些方法就是具體進行事件處理的代碼)。每個組件的事件處理,在程序代碼設(shè)計上都是要處理這三點。下面我們以例子程序來進行演示和體會。import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.JTextField;/解決實驗題目中,判斷字符串為空的幾種方法public class EmptyTest implements ActionListenerJFrame jFrame=new JFrame(JFrame);JTextF- 1.請仔細閱讀文檔,確保文檔完整性,對于不預覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認領(lǐng)!既往收益都歸您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- java 圖形界面 程序設(shè)計 補充 講稿
鏈接地址:http://www.szxfmmzy.com/p-9634838.html