Java圖形界面簡介.ppt
《Java圖形界面簡介.ppt》由會員分享,可在線閱讀,更多相關(guān)《Java圖形界面簡介.ppt(47頁珍藏版)》請在裝配圖網(wǎng)上搜索。
Java2實用教程(第3版)教學課件,,第7章組件及事件處理,7.1Java窗口7.2文本框7.3內(nèi)部類實例做監(jiān)視器7.4按鈕與標簽7.5菜單項7.6文本區(qū)7.7面板7.8布局7.9畫布,7.10選擇型組件7.11Component類的常用方法7.12窗口事件7.13鼠標事件7.14焦點事件7.15鍵盤事件7.16使用剪貼板7.17打印7.18綜合實例,,,圖形用戶界面,通過圖形用戶界面(GUI:GraphicsUserInterface),用戶和程序之間可以方便地進行交互。Java的抽象窗口工具包(AWT:AbstractWindowToolkit)中包含了許多類來支持GUI設(shè)計。AWT由Java的java.awt包提供,該包中有許多用來設(shè)計GUI的組件類,如:按鈕、菜單、列表、文本框等組件類,同時它還包含窗口、面板等容器類。,,,AWT(AbstractWindowToolkit),java.awt包Java.swing包提供了基本的java程序的GUI設(shè)計工具。Component(組件)Container(容器)LayoutManager(布局管理器),Java.lang.Object,AWTEvent,Font,Componet,Graphics,MenuComponent,各種布局管理器類,Container,Panel,Applet,Window,Frame,,,,,,,,,,,,,,容器類(Container)和組件類(Component),Java.awt包中一部分類的層次關(guān)系如圖所示,,,Component(組件),Java的圖形用戶界面的最基本組成部分是組件,組件是一個可以以圖形化的方式顯示在屏幕上并能與用戶進行交互的對象,例如一個按鈕,一個標簽等。組件不能獨立地顯示出來,必須將組件放在一定的容器中才可以顯示出來。,Component類,java.awt包中最核心的類就是Component類,它是構(gòu)成Java圖形用戶界面的基礎(chǔ),大部分組件都是由該類派生出來的。Component類是一個抽象類,其中定義了組件所具有的一般功能:基本的繪畫支持(paint,repaint,update等)、字體和顏色等外形控制(setFont,SetForeground等)、大小和位置控制(SetSize,SetLocation等)以及組件狀態(tài)控制(SetEnable,isEnable,isVisible,isValid等),……。常見組件包括:Button,Checkbox,,Choice,Label,List等。,各類GUI部件的特點,Java提供的類按鈕(Button):單擊產(chǎn)生ActionEvent事件標簽(Label):標簽的功能是只顯示文本文本框(TextField):只能顯示一行,按回車鍵觸發(fā)ActionEvent窗體(Frame):頂級容器,關(guān)閉時觸發(fā)WindowEvent面板(Panel):可進行嵌套布局的容器,面板作為一個部件加入到窗體容器中,面板作為容器又可以放其他面板和部件,Container(容器),容器(Container)實際上是Component的子類,因此容器本身也是一個組件,具有組件的所有性質(zhì),另外還具有容納其它組件和容器的功能。其主要功能包括:組件的管理:方法add()可以向其中添加一個組件,remove()刪除其中的一個組件,…布局管理:每個Container類都和一個布局管理器相聯(lián),以確定其中組件的布局。Container類可以通過setLayout()方法設(shè)置某種布局方式。常見的Container類有:Frame,Panel,Applet等。,LayoutManager(布局管理器),為了使我們生成的圖形用戶界面具有良好的平臺無關(guān)性,Java語言中,提供了布局管理器這個工具來管理組件在容器中的布局,而不使用直接設(shè)置組件位置和大小的方式。每個容器都有一個布局管理器,當容器需要對某個組件進行定位或判斷其大小尺寸時,就會調(diào)用其對應(yīng)的布局管理器。標準的布局管理器類有:FlowLayout;BorderLayout;GridLayout;CardLayout;GridBagLayout,在程序中安排組件的位置和大小時,應(yīng)該注意:容器中的布局管理器負責各個組件的大小和位置,因此用戶無法在這種情況下設(shè)置組件的這些屬性。如果試圖使用Java語言提供的setLocation(),setSize(),setBounds()等方法,則都會被布局管理器覆蓋。如果用戶確實需要親自設(shè)置組件大小或位置,則應(yīng)取消該容器的布局管理器,方法為:setLayout(null);,javax.swing包為我們提供了更加豐富的、功能強大的組件,稱為swing組件,其中大部分組件是輕量組件,沒有同位體。swing組件的輕組件在設(shè)計上和AWT完全不同,輕組件把與顯示組件有關(guān)的許多工作和處理組件事件的工作交給相應(yīng)的UI代表來完成,這些UI代表是用Java語言編寫的類,這些類被增加到j(luò)ava的運行環(huán)境中,因此組件的外觀不依賴平臺,不僅在不同平臺上的外觀是相同的,而且較重量組件而言有更高的性能.,幾個重要的類,javax.swing包中有四個最重要的類JFrame、JDialog、JComponent。JComponent類的子類都是輕組件,而JFrame、、JDialog都是重組件,即有同位體的組件,這樣窗口(JFrame)、對話框(JDialog)可以和操作系統(tǒng)交互信息,輕組件必須在這些重量容器中繪制自己。JComponent類是java.awt包中容器類Container類的子類,因此所有的輕量組件也都是容器。,1.JComponent類,JComponent類是所有輕量組件的父類(就象Component類是所有重量組件的父類)。JComonent的幾個代表子類:JLable負責創(chuàng)建標簽JPanel負責創(chuàng)建面板對象JTextField負責創(chuàng)建文本框?qū)ο驤Button負責創(chuàng)建按鈕,7.1Java窗口,Frame類是Container類的間接子類。當需要一個窗口時,可使用Frame或其子類創(chuàng)建一個對象。窗口也是一個容器,可以向窗口添加組件。需要注意的是,窗口默認地被系統(tǒng)添加到顯示器屏幕上,因此,不允許將一個窗口添加到另一個容器中。,,,1.Frame常用方法,1.Frame()該構(gòu)造方法可以創(chuàng)建一個無標題的窗口2.Frame(Strings)該構(gòu)造方法可以創(chuàng)建一個標題為s的窗口,窗口的默認布局為BorderLayout布局。3.publicvoidsetBounds(inta,intb,intwidth,intheight)窗口調(diào)用該方法可以設(shè)置出現(xiàn)在屏幕上時的初始位置是(a,b),即距屏幕左面a個像素、距屏幕上方b個像素;窗口的寬是width,高是height。4.publicvoidsetSize(intwidth,intheight)設(shè)置窗口的大小,窗口在屏幕出現(xiàn)是默認位置是(0,0)。,,,5.publicvoidsetVisible(booleanb)設(shè)置窗口是可見還是不可見,窗口默認是不可見的。6.publicvoidsetResizable(booleanb)設(shè)置窗口是否可調(diào)整大小,窗口默認是可調(diào)整大小的。創(chuàng)建一個窗口setLayout()設(shè)置窗口的布局。setLayout(newflowLayout()),7.3文本框,java.awt包中的類TextField類創(chuàng)建文本框.用戶可以在文本框輸入單行的文本.,,,1.TextField類的主要方法,TextField(intx)如果使用這個構(gòu)造方法創(chuàng)建文本框?qū)ο?,文本框中的可見字符序列的長度為x個機器字符長。文本框是可編輯的,用戶可以在文本框中輸入若干個字符。TextField(Strings)如果使用這個構(gòu)造方法創(chuàng)建文本框?qū)ο螅瑒t文本框的初始字符串為s。文本框是可編輯的,可以在文本框中輸入若干個字符。publicvoidsetText(Strings)文本框?qū)ο笳{(diào)用該方法可以設(shè)置文本框中的文本為參數(shù)s指定的文本,文本框中先前的文本將被清除。publicStringgetText()文本框?qū)ο笳{(diào)用該方法可以獲取文本框中的文本。publicvoidaddActionListener(ActionListenerl)文本框?qū)ο笳{(diào)用該方法可以向文本框增加動作監(jiān)視器(將監(jiān)視器注冊到文本框)。,,,importjava.awt.*;classWindowTextextendsFrame{TextFieldtext1,text2;WindowText(Strings){super(s);setLayout(newFlowLayout());text1=newTextField("輸入密碼:",10);text1.setEditable(false);text2=newTextField(10);text2.setEchoChar(*);add(text1);add(text2);setBounds(100,100,200,150);setVisible(true);validate();}}publicclassExample7_2{publicstaticvoidmain(Stringargs[]){WindowTextwin=newWindowText("添加了文本框的窗口");}},7.4按鈕與標簽,標簽的功能是只顯示文本,不能動態(tài)地編輯文本。Lalel類的實例就是一個標簽.Label(),Label(Stringtext),Label(Stringtext,intalignment)publicStringgetText()publicvoidsetText(Stringtext)publicintgetAlignment()publicvoidsetAlignment(intalignment,,,按鈕與標簽,Java.awt包中的Button類是專門用來建立按鈕的。即Button類創(chuàng)建的一個對象就是一個按鈕。按鈕可以發(fā)生ActionEvent事件,當按鈕獲得監(jiān)視器之后,用鼠標單擊按鈕,就發(fā)生ActionEven事件。Button(),Button(Stringlabel)publicStringgetLabel()publicvoidsetLabel(Stringlabel)publicvoidaddActionListener(ActionListenerl)publicvoidremoveActionListener(ActionListenerl),,擴展按鈕建一個button的子類例7.7,2.文本框上的ActionEvent事件,學習組件除了了解組件的屬性和功能外,一個更重要的方面是學習怎樣處理組件上發(fā)生的界面事件。在學習處理事件時,必須很好地掌握事件源、監(jiān)視器、處理事件的接口這三個概念。通過處理文本框這個具體的組件上的事件,來掌握處理事件的基本原理。,,,在圖形用戶界面中,程序和用戶的交互是通過組件響應(yīng)各種事件來實現(xiàn)的。在Java中能產(chǎn)生事件的組件叫做事件源,如按鈕。如果希望對單擊按鈕事件進行處理,可給事件源(按鈕)注冊一個事件監(jiān)聽器(如包含按鈕的容器),如同簽訂了一個委托合同,當事件源發(fā)生事件時,事件監(jiān)聽器就代替事件源對發(fā)生的事件進行處理,這就是所謂的委托事件處理機制。,Java的事件處理模式,監(jiān)視器需要一個對象對事件源進行監(jiān)視,以便對發(fā)生的事件作出處理。事件源通過調(diào)用相應(yīng)的方法將某個對象作為自己的監(jiān)視器。例如,對于文本框,這個方法是:addActionListener(監(jiān)視器);創(chuàng)建該監(jiān)視器對象的類必須聲明實現(xiàn)相應(yīng)的接口,Java的事件處理模式,事件源能夠產(chǎn)生事件的對象都可以成為事件源,如文本框、按鈕、下拉式列表等。也就是說,事件源必須是一個對象,而且這個對象必須是Java認為能夠發(fā)生事件的對象。處理事件的接口在文本框獲得輸入焦點之后,如果用戶按回鍵,Java運行系統(tǒng)就自動用ActionEvent類創(chuàng)建了一個對象,即發(fā)生了ActionEvent事件.當事件源發(fā)生事件時,監(jiān)視器就自動調(diào)用執(zhí)行被類實現(xiàn)的某個接口方法.,,,文本框接口(ActionListener)方法:publicvoidactionPerformed(ActionEvente),處理事件示意圖,,,,當你將一個類用作事件監(jiān)聽器時,你已經(jīng)設(shè)置好一個特定的事件類型,它會用該類進行監(jiān)聽。接下來的操作是:一個匹配的監(jiān)聽器必須被加入到該組件中組件被創(chuàng)建之后,可以在組件上調(diào)用如下方法來將監(jiān)聽器與它聯(lián)系起來addActionListener()可用于Button,Check,TexyField等組件addItemListener()可用于Button,CheckBox等組件addKeyListener()可用于所有可視化組件addMouseListener()可用于所有可視化組件addWindowsListener()可用于Window,Frame等組件例:下面語句創(chuàng)建一個Button對象,并將它與動作事件監(jiān)聽器聯(lián)系起來Buttonbutton=newButton(“OK”);button.addActionListener(this);//this指明當前類就是事件監(jiān)聽器,ActionEvent事件getSource()getActionCommand()例子7.3,7.4,7.7面板,java.awt包的Panel類是Container(容器)的子類,因此Panel類及其子類的實例也是一個容器,Panel型容器的默認布局是FlowLayout型布局。Panel類創(chuàng)建的對象稱做面板,我們經(jīng)常在一個面板里添加若干個組件后,再把面板放到另一個容器里。,,,7.8布局,當把組件添加到容器中時,希望控制組件在容器中的位置,這就需要學習布局設(shè)計的知識。我們將分別介紹java.awt包中的FlowLayout、BorderLayout、CardLayout、GridLayout布局類和java.swing.border包中的BoxLayout布局類。容器可以使用方法:setLayout(布局對象);來設(shè)置自己的布局。,,,1.FlowLayout布局,如果一個容器使用這個FlowLayout型布局,組件按照加入的先后順序從左向右排列,一行排滿之后就轉(zhuǎn)到下一行繼續(xù)從左至右排列.,,,importjava.awt.*;classWindowFlowextendsFrame{WindowFlow(Strings){super(s);FlowLayoutflow=newFlowLayout();flow.setAlignment(FlowLayout.LEFT);flow.setHgap(2);flow.setVgap(8);setLayout(flow);for(inti=1;i<=10;i++){Buttonb=newButton("iam"+i);add(b);}setBounds(100,100,150,120);setVisible(true);}}publicclassExample7_12{publicstaticvoidmain(Stringargs[]){WindowFlowwin=newWindowFlow("FlowLayout布局窗口");}},2.BorderLayout布局,BorderLayout布局是Window型容器的默認布局,例如Frame、Dialog都是Window類的子類,它們的默認布局都是BorderLayout布局。如果一個容器使用這種布局,那么容器空間簡單地劃分為東、西、南、北、中五個區(qū)域,中間的區(qū)域最大。,,,importjava.awt.*;classExample7_13{publicstaticvoidmain(Stringargs[]){Framewin=newFrame("窗體");win.setBounds(100,100,300,300);win.setVisible(true);ButtonbSouth=newButton("我在南邊"),bNorth=newButton("我在北邊"),bEast=newButton("我在東邊"),bWest=newButton("我在西邊");TextAreabCenter=newTextArea("我在中心");win.add(bNorth,BorderLayout.NORTH);win.add(bSouth,BorderLayout.SOUTH);win.add(bEast,BorderLayout.EAST);win.add(bWest,BorderLayout.WEST);win.add(bCenter,BorderLayout.CENTER);win.validate();}},7.11Component類的常用方法,Component類是所有組件的父類,這一節(jié)介紹Component類的常用方法,,,1.組件的顏色,publicvoidsetBackground(Colorc)設(shè)置組件的背景色。publicvoidsetForeground(Colorc)設(shè)置組件的前景色。publicColorgetBackground()獲取組件的背景色。publicColorgetForeground()獲取組件的前景色。,,,2.組件的字體,publicvoidsetFont(Fontf)組件調(diào)用該方法設(shè)置組件上的字體。例如,文本組件調(diào)用該方法可以設(shè)置文本組件中的字體。publicFontgetFont()組件調(diào)用該方法獲取組件上的字體。text.setFont(newFont("隸書",Font.BOLD,32));例7.22,,,GraphicsEnvironment抽象類類描述了Java(tm)應(yīng)用程序在特定平臺上可用的GraphicsDevice對象和Font對象的集合。此GraphicsEnvironment中的資源可以是本地資源,也可以位于遠程機器上。GraphicsDevice對象可以是屏幕、打印機或圖像緩沖區(qū),并且都是Graphics2D繪圖方法的目標。每個GraphicsDevice都有許多與之相關(guān)的GraphicsConfiguration對象。這些對象指定了使用GraphicsDevice所需的不同配置。,publicstaticGraphicsEnvironmentgetLocalGraphicsEnvironment()返回本地GraphicsEnvironmentpublicabstractString[]getAvailableFontFamilyNames()返回一個包含此GraphicsEnvironment中所有字體系列名稱的數(shù)組,它針對默認語言環(huán)境進行了本地化,由Locale.getDefault()返回。典型用法是向用戶展示特定字體系列名稱的選擇。然后,應(yīng)用程序可以在創(chuàng)建字體(包括樣式,如粗體或斜體)時指定此名稱,這為字體系統(tǒng)從同一字體系列的多種字體中選擇自身最匹配的字體提供了靈活性。,3.組件的大小與位置,publicvoidsetSize(intwidth,intheight)組件調(diào)用該方法設(shè)置組件的大小,參數(shù)width指定組件的寬度,height指定組件的高度。publicvoidsetLocation(intx,inty)組件調(diào)用該方法設(shè)置組件在容器中的位置,包含該組件的容器都有默認的坐標系,容器的坐標系的左上角的坐標是(0,0),參數(shù)x,y指定該組件的左上角在容器的坐標系中的坐標,即組件距容器的左邊界x個像素,距容器的上邊界y個像素。,,,publicPointgetLocation()組件調(diào)用該方法返回一個Point對象的引用,該對像實體中含有名字是x和y的成員變量,方法返回的Point對象的x,y的值就是組件的左上角在容器的坐標系中的x坐標和y坐標。publicvoidsetBounds(intx,inty,intwidth,intheight)組件調(diào)用該方法設(shè)置組件在容器中的位置和組件的大小。該方法相當于setSize方法和setLocation方法的組合。,4.組件的激活與可見性,publicvoidsetEnabled(booleanb)組件調(diào)用該方法可以設(shè)置組件是否可被激活,當參數(shù)b取值true時,組件可以被激活,當參數(shù)b取值false時,組件不可激活。默認情況下,組件是可以被激活的。publicvoidsetVisible(boolean)設(shè)置組件在該容器中的可見性,當參數(shù)b取值true時,組件在容器中可見,當參數(shù)b取值false時,組件在容器中不可見。除了Window型組件外,其它類型組件默認是可見的。,,,- 1.請仔細閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認領(lǐng)!既往收益都歸您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- Java 圖形界面 簡介
鏈接地址:http://m.appdesigncorp.com/p-3771615.html