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