《圖形用戶界面》PPT課件.ppt
《《圖形用戶界面》PPT課件.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《《圖形用戶界面》PPT課件.ppt(33頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1,第八章 圖形用戶界面,2,圖形用戶界面簡(jiǎn)稱GUI(Graphics User Interface),它給用戶提供了一個(gè)直觀、方便、快捷的圖形化操作界面,就象WINDODS圖形操作界面。有了它,計(jì)算機(jī)的使用變得十分便捷。 Java提供了多種包用于設(shè)計(jì)圖形用戶界面, 如AWT和Swing等,它們的使用方法雷同。本章介紹主要介紹AWT。,3,8.1 抽象窗口工具箱——AWT組件,在AWT(Abstract Window Toolkit)的概念中,窗口系統(tǒng)中所顯示的各種對(duì)象都統(tǒng)稱為“組件” (Component) 。 組件分為: 基本組件——是構(gòu)成圖形用戶界面的基本元素。 容器組件——用來放置其它組件的組件,4,下表列出了AWT中的基本組件。,1.基本組件,5,2. 容器組件 容器組件是用來放置其它組件的容器,故稱為容器組件(Container)。用戶可以把各種組件放到容器組件中,甚至把一個(gè)容器組件放到另一個(gè)容器組件中,因?yàn)槿萜鹘M件也是組件,都是Component類的子類。 AWT用Container類來定義最基本的容器,所有可以作為容器的窗口對(duì)象都是Container類或其子類的對(duì)象。 AWT提供了4個(gè)容器類: Windows類、Frame類、Dialog類、Panel類,6,框架java.awt.Frame,建立窗口是Java圖形用戶界面程序設(shè)計(jì)的第一步,一般由Frame類來完成這一功能。 Frame類用于創(chuàng)建帶有標(biāo)題、菜單欄、最大化、最小化按鈕的完整的窗口。 Frame類的構(gòu)造方法有: Frame() 創(chuàng)建一個(gè)不帶標(biāo)題的框架 Frame(String) 創(chuàng)建一個(gè)帶標(biāo)題的框架,8.2 容器組件,7,import java.awt.*; import java.awt.event.*; public class test { public static void main(String []args) { Frame f=new Frame(“我的第一個(gè)窗口“); f.setSize(400,300);//設(shè)置窗口大小 f.setLayout(null);//設(shè)置布局模式為空 f.addWindowListener(new MyWindowAdapter()); //使得Frame能夠監(jiān)聽窗口事件 f.setVisible(true);//創(chuàng)建窗口后要調(diào)用setVisible(true)才能顯示出來 } },例:創(chuàng)建一個(gè)Frame窗口,class MyWindowAdapter extends WindowAdapter { public void windowClosing(WindowEvent e) {System.exit(0); //正常退出 } },8,容器組件除了Frame之外,還有面板(Panel)、對(duì)話框(Dialog)等 面板(Panel)是能在屏幕上實(shí)際顯示的組件,但必須放在Windows、Frame、Dialog等容器中才能夠顯示。 對(duì)話框是有標(biāo)題條而無菜單和最小化圖標(biāo)的容器組件,但它必須依附在某個(gè)窗口上(如Frame),一旦它所依附的窗口關(guān)閉了, 對(duì)話框也自動(dòng)關(guān)閉 。,9,8.3按鈕,按鈕是相對(duì)簡(jiǎn)單的一種組件,它在屏幕上通常表現(xiàn)為一塊有邊界的矩形區(qū)域,上面有文字標(biāo)記來說明該按鈕的功能, 按鈕由Button類來定義,其構(gòu)造方法有二個(gè): Button( ) 生成一個(gè)沒有標(biāo)記的按鈕 Button(String label) 生成一個(gè)帶標(biāo)記label的按鈕 設(shè)置按鈕的位置及大小: setBounds(x,y,width,height); x:按鈕左上角的橫坐標(biāo) y:按鈕左上角的縱坐標(biāo) width:按鈕的寬度 height:按鈕的高度,10,創(chuàng)建Button后,可調(diào)用Frame對(duì)象的add方法,將組件放到窗口上。 Button類中有一系列對(duì)按鈕進(jìn)行管理的方法,可以進(jìn)行設(shè)置和獲取按鈕的狀態(tài),處理按鈕產(chǎn)生的事件等。常用的方法有:setLabel(String label) 設(shè)置按鈕標(biāo)記,Frame f=new Frame(“我的第一個(gè)窗口“); f.setSize(400,300); f.setLayout(null); Button b=new Button(“你好!“); b.setBounds(50,50,80,55); f.add(b);,11,8.4 標(biāo)簽,標(biāo)簽(Label)是一種只能用來顯示單行文本的組件。 標(biāo)簽在容器中的對(duì)齊方式有三種:左對(duì)齊、居中和右對(duì)齊, 用LABEL.LEFT、LABEL.CENTER、LABEL.RIGHT三個(gè)靜態(tài)常量表示,在程序中可以設(shè)置其對(duì)齊方式。 標(biāo)簽類構(gòu)造方法: Label( ) 生成一個(gè)空標(biāo)簽 Label(String text) 生成一個(gè)帶有指定文本的標(biāo)簽 Label l=new Label(“hello java“); l.setBounds(50,150,80,55); f.add(l);,12,8.5 JBuilder,JBuilder是一種很好的Java開發(fā)工具,可以方便地進(jìn)行可視化開發(fā)。 下面我們使用JBuilder開發(fā)一個(gè)簡(jiǎn)單的應(yīng)用程序,在界面上顯示一個(gè)按鈕和一個(gè)標(biāo)簽,點(diǎn)擊按鈕后,標(biāo)簽顯示“HelloJava” 程序的運(yùn)行方式: (1)在控制臺(tái)界面下可以運(yùn)行該程序。運(yùn)行Application類,注意包名 (2)在File\New\Archive\Application\下打包成可執(zhí)行jar包,雙擊即可運(yùn)行 用JBuilder開發(fā)一個(gè)簡(jiǎn)單的Applet,13,8.6 組件在容器中的布局,在以往的用戶界面中,每個(gè)控件的位置一般都是用點(diǎn)坐標(biāo)確定的,但是在Java中,情況有所不同。由于Java程序需要運(yùn)行在不同的操作系統(tǒng)、不同的屏幕設(shè)置下,用點(diǎn)坐標(biāo)來確定位置就難以適應(yīng)各種情況,因此Java使用布局管理器來進(jìn)行排版。布局管理器的優(yōu)點(diǎn)是能根據(jù)不同的屏幕自動(dòng)進(jìn)行排版,缺點(diǎn)是控件在屏幕上的確切位置難以確定。 AWT提供了五種布局管理器: BorderLayout、 FlowLayout、GridLayout、CardLayout和GridBagLayout。,14,如果用戶不指定容器所使用的布局管理器,那么容器將使用自己缺省的布局管理器。每當(dāng)容器需要改變外觀時(shí),這些缺省的布局管理器會(huì)發(fā)揮作用。AWT提供的布局管理器各有各的長(zhǎng)處和缺點(diǎn)。用戶根據(jù)不同要求,選用不同的AWT布局管理器。 1) 如果要求盡量使用所有的空間來顯示組件,可以考慮使用BorderLayout,應(yīng)該將占用空間最大的組件放在中心部位。BorderLayout有五個(gè)區(qū)域:東、西、南、北、中。如果用戶擴(kuò)大窗口,用戶將會(huì)看到中心區(qū)域會(huì)盡可能的擴(kuò)大,而其他區(qū)域只擴(kuò)大到容納組件所需空間的大小。,15,2)如果需要在緊湊的一行中以組件的自然尺寸顯示較少組件時(shí),可以考慮使用FlowLayout。 FlowLayout將組件以它們合適的尺寸放在一行中。如果容器中的水平空間對(duì)于將所有組件放在一行中太小,那么FlowLayout將用多行顯示。 3)用戶需要在多行或多列中顯示一些同樣尺寸的組件,GridLayout最適合此情況。如果有必要的話,可以使用面板來容納組件。GridLayout將組件放置在格柵的單元空間中。每個(gè)組件占據(jù)其單元空間的所有空間,而且每個(gè)單元空間具有相同的尺寸。,16,4) CardLayout所管理的每個(gè)組件就像在紙盒里放的紙牌,在某一時(shí)刻只有最上面的一張可見。用戶可以通過指定組件的名字來選擇要顯示的組件。 下面我們用JBuilder開發(fā)一個(gè)簡(jiǎn)單的計(jì)算器,能夠進(jìn)行加、減、乘、除運(yùn)算。,17,8.7 AWT中的其它類,1. Dimension類 它指定了一個(gè)矩形區(qū)域的尺寸; 2. Shape類 它包含了點(diǎn)、矩形和多邊形。 3. Color類 它定義了一些常量來表示常用的顏色,比如,Color.blue表示藍(lán)色。 4. Image類 提供了對(duì)圖像數(shù)據(jù)的操作途徑,18,5. Fonts類 它們用來控制文本的外觀。Font類使用戶可以獲得關(guān)于字體的信息并創(chuàng)建不同的字體對(duì)象。 6. Graphics類 Graphics類負(fù)責(zé)AWT的繪圖。 7. Event類 Event類負(fù)責(zé)AWT的事件處理。,19,8.8 事件處理,對(duì)支持圖形用戶界面的任何一種操作系統(tǒng)來說,都必須不斷監(jiān)視環(huán)境中發(fā)生的各種事件,如:鼠標(biāo)移動(dòng),用戶按下了某個(gè)鍵等。隨后,每個(gè)程序都要決定對(duì)這些事件作出什么樣的響應(yīng)。 當(dāng)用戶在組件上作出動(dòng)作時(shí)(如:在組件上單擊鼠標(biāo)或按回車鍵),就創(chuàng)建了一個(gè)事件對(duì)象。,20,一個(gè)事件對(duì)象包含了以下信息: 1) id----事件的類型。如按鍵事件、單擊鼠標(biāo)事件等 2) target----發(fā)生事件的對(duì)象 3) when----指出事件發(fā)生的時(shí)間 4) x, y----發(fā)生事件的坐標(biāo) 5) key----鍵盤事件中被按下的鍵 6) arg----一個(gè)與事件相關(guān)的參數(shù)。 7) modifier----修飾鍵的狀態(tài)(即Alt,Ctrl鍵的狀態(tài)),21,事件處理三步驟: (1)確定事件源,如在什么組件上監(jiān)聽事件 (2)將組件的某類事件交給事件監(jiān)聽器處理。 (3)在事件監(jiān)聽器的相應(yīng)事件響應(yīng)函數(shù)中實(shí)現(xiàn)自己的功能。 當(dāng)在組件上產(chǎn)生某類事件對(duì)象時(shí),這個(gè)事件對(duì)象會(huì)被傳遞給上面指定的事件監(jiān)聽器,事件監(jiān)聽器接收到事件對(duì)象后,會(huì)根據(jù)事件對(duì)象內(nèi)封裝的信息,決定執(zhí)行哪個(gè)事件響應(yīng)函數(shù)。,22,MouseListener主要處理鼠標(biāo)是否在某個(gè)組件上、是否按下了鼠標(biāo)鍵、鼠標(biāo)是否離開了某個(gè)組件等事件。 MouseMotionListener主要處理鼠標(biāo)是否在移動(dòng)等事件。 WindowListener主要處理窗口事件,如窗口的最大化、最小化、打開、關(guān)閉等事件,一些事件監(jiān)聽器的事件響應(yīng)函數(shù),23,例: 以響應(yīng)窗口關(guān)閉事件為例。當(dāng)點(diǎn)擊窗口的關(guān)閉按鈕時(shí),會(huì)產(chǎn)生WindowClosing事件,這時(shí)必須在該事件的處理函數(shù)中調(diào)用退出函數(shù),窗口才能正常關(guān)閉,否則關(guān)閉不了。 (1)事件源為窗口本身 Frame f=new Frame(“我的第一個(gè)窗口“); (2)將窗口的窗口事件交給WindowListener監(jiān)聽器處理。 f.addWindowListener(new MyWindowAdapter()); 注意 public void addWindowListener(WindowListener l) 參數(shù)類型是WindowListener類型,而WindowListener是一個(gè)接口,只能為該函數(shù)傳遞一個(gè)實(shí)現(xiàn)了 WindowListener接口的類的對(duì)象。Java提供了一個(gè)抽象類WindowAdapter,該類實(shí)現(xiàn)了WindowListener接口,我們可以定義WindowAdapter類的一個(gè)子類MyWindowAdapter ,將該子類的對(duì)象傳遞給addWindowListener函數(shù)即可。,24,(3)在事件監(jiān)聽器的相應(yīng)事件函數(shù)中實(shí)現(xiàn)自己的功能。 class MyWindowAdapter extends WindowAdapter { public void windowClosing(WindowEvent e) {System.exit(0); //正常退出 } } 產(chǎn)生windowClosing事件后,系統(tǒng)會(huì)自動(dòng)調(diào)用事件監(jiān)聽器的windowClosing函數(shù)。,25,import java.awt.*; import java.awt.event.*; public class test { public static void main(String []args) { Frame f=new Frame(“我的第一個(gè)窗口“); f.setSize(400,300);//設(shè)置窗口大小 f.setLayout(null);//設(shè)置布局模式為空 f.addWindowListener(new MyWindowAdapter()); //使得Frame能夠監(jiān)聽窗口事件 f.setVisible(true);//創(chuàng)建窗口后要調(diào)用setVisible(true)才能顯示出來 } },class MyWindowAdapter extends WindowAdapter { public void windowClosing(WindowEvent e) {System.exit(0); //正常退出 } },完整程序,26,import java.awt.*; import java.awt.event.*; public class test { public static void main(String []args) { Frame f=new Frame(“我的第一個(gè)窗口“); f.setSize(400,300);//設(shè)置窗口大小 f.setLayout(null);//設(shè)置布局模式為空 f.addWindowListener(new WindowAdapter() {//使得Frame能夠監(jiān)聽窗口事件 public void windowClosing(WindowEvent e) { //正常退出 System.exit(0); } }); f.setVisible(true);//創(chuàng)建窗口后要調(diào)用setVisible(true)才能顯示出來 } },例:創(chuàng)建一個(gè)Frame窗口(方法二),創(chuàng)建了一個(gè) 匿名內(nèi)部類對(duì)象 該匿名內(nèi)部類的父類是 WindowAdapter 該匿名內(nèi)部類覆蓋了 父類的 windowClosing方法,27,例: 以在按鈕上響應(yīng)點(diǎn)擊鼠標(biāo)事件(MouseClicked)為例: (1)確定事件源 JButton jButton1 = new JButton(); (2)將按鈕的鼠標(biāo)事件交給MouseListener監(jiān)聽器處理。 jButton1.addMouseListener(new MymouseAdapter(this)); public void addMouseListener(MouseListener l) 參數(shù)是接口類型,Java提供了抽象類MouseAdapter,實(shí)現(xiàn)了MouseListener接口,我們只需要定義MouseAdapter類的子類,然后用該子類創(chuàng)建一個(gè)對(duì)象傳遞給addMouseListener函數(shù)。 (3)在事件監(jiān)聽器的相應(yīng)事件函數(shù)中實(shí)現(xiàn)自己的功能。,28,class MymouseAdapter extends MouseAdapter { private Frame1 adaptee; MymouseAdapter (Frame1 adaptee) { this.adaptee = adaptee; } public void mouseClicked(MouseEvent e) { adaptee.jButton1_mouseClicked(e); } },29,關(guān)于ActionEvent 當(dāng)我們點(diǎn)擊了一個(gè)按鈕、選擇了菜單中的某個(gè)項(xiàng)目或在文本編輯框中回車后,均會(huì)產(chǎn)生ActionEvent事件。 (1)確定事件源 Button button1 = new Button(); (2)將按鈕的ActionEvent事件交給ActionListener監(jiān)聽器處理。 button1.addActionListener(new MyFrame_button3_actionAdapter(this)); public void addActionListener(ActionListener l) 我們必須定義一個(gè)類,讓這個(gè)類實(shí)現(xiàn)ActionListener接口 (3)在該類中實(shí)現(xiàn)來自ActionListener接口的actionPerformed方法。 當(dāng)產(chǎn)生ActionEvent事件時(shí),會(huì)自動(dòng)調(diào)用actionPerformed方法,30,class MyFrame_button1_actionAdapter implements ActionListener { private MyFrame adaptee; MyFrame_button1_actionAdapter(MyFrame adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.button1_actionPerformed(e); } },31,小結(jié),Java提供了多種圖形用戶接口包。本章介紹了AWT中一些常用基本組件、容器,以及如何使用它們創(chuàng)建基于圖形用戶界面的應(yīng)用。最后講述了事件處理機(jī)制,32,java.util包提供了隨機(jī)數(shù)類Random。 java.util.Random r1=new java.util.Random(); int data1; data1=r1.nextInt();//產(chǎn)生隨機(jī)整數(shù) 考慮:如何用隨機(jī)數(shù)類產(chǎn)生0~9之間的隨機(jī)整數(shù)?,補(bǔ)充,33,import java.util.*; class test { public static void main(String args[]) { Random r1=new Random(); int data1; data1=r1.nextInt(); if(data10)data1=data1*(-1); data1=data1%10; System.out.println(data1); } },- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 圖形用戶界面 圖形 用戶界面 PPT 課件
鏈接地址:http://www.hcyjhs8.com/p-2741427.html