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