版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第八章圖形用戶界面8.1Java的圖形用戶界面簡介8.2基本用戶界面8.3組件布局管理器8.4事件處理8.5高級圖形用戶界面圖形用戶界面(GUI)是一種方便的人機界面,它通過圖形的方式,借助菜單、按鈕等圖形界面組件和鼠標操作,在用戶和計算機之間進行交互。構(gòu)成GUI的基本要素是組件,組件分為基本的控制組件和容器。組件(component)是構(gòu)成GUI的基本要素,通過對不同事件的響應(yīng)來完成和用戶的交互或組件之間的交互。組件一般作為一個對象放置在容器(Container)中。容器是能容納和排列組件的組件,要顯示組件,用戶必須把它放置在容器里,通過容器的add()方法將組件加入到容器中。容器本身也是組件,因此可以將一個容器添加到另一個容器中實現(xiàn)容器的嵌套。8.1Java的圖形用戶界面簡介Java的GUI功能主要包含在java.awt包和javax.swing包中。Java抽象窗口工具包AWT(AbstractWindowToolkit)是java圖形界面的工具箱。其中有一些類不是使用java語言寫的,因此并沒有達到真正的平臺獨立。為了實現(xiàn)真正的平臺獨立,產(chǎn)生了Swing包。Swing完全用Java語言編寫,Swing界面在不同的平臺上外觀完全一樣,真正做到了平臺獨立。Swing提供了更完整的組件,引入了許多新的特性和功能。所有的Swing組件都以J開頭,以便與老的AWT組件區(qū)分。Swing包定義了頂層容器和其它容器兩種類型的組件。JWindow、JFrame、JDialog和JApplet都是頂層容器,它們分別是容器Window、Frame、Dialog和Applet的子類;其它容器是由JComponent組件類派生的子類如JButton、JPanel和JMenu等。頂層容器和其它容器的區(qū)別是:它包含一個內(nèi)容面板,Swing組件可以加入到內(nèi)容面板里面,但不能直接加入到頂層容器中。ComponentContainerAWT組件(Button等)WindowJComponentPanelJAppletJFrameJWindowJDialogJlabel,Jpanel,Jbutton等AppletFrameDialogAWT、Swing組件的層次繼承關(guān)系java.awt
包含所有制作用戶界面及繪圖、圖像所需的類
java.awt.color
處理顏色的類
java.awt.datatransfer
提供在應(yīng)用軟件內(nèi)及其間數(shù)據(jù)轉(zhuǎn)換所需的類
java.awt.dnd
提供拖(drag)及放(drop)處理
java.awt.event
事件處理
java.awt.font
關(guān)于字型的類
java.awt.geom
提供定義及操作2D幾何對象所需的Java2D類
java.awt.im
輸入方法結(jié)構(gòu)類
java.awt.im.spi
提供界面供開發(fā)輸入方法,可用于任何執(zhí)行階段環(huán)境
java.awt.image
圖像處理類
java.awt.image.renderable
制造rendering-independent圖像所需的類
java.awt.print
處理打印的類
AWT是由下列包所組成的。GUI接口的建立步驟①建立元件:在構(gòu)造方法中,使用new()方法,通過構(gòu)造方法的參數(shù)進行初始化。同時通過getContentPane獲取容器的句柄。②加入容器中:在構(gòu)造方法中,使用容器句柄.add(元件)將元件加入容器中。③配置版面:在構(gòu)造方法中,通過容器.setXXX(XXX),元件.setXXX(XXX),JFrame.setXXX(XXX)方法進行版面格式的配置。④處理事件:在構(gòu)造方法中,使用元件.addXXXListener()加入事件處理器。⑤在構(gòu)造方法外部定義事件處理器的功能。8.2基本用戶界面8.2.1基本用戶界面簡介8.2.2標簽8.2.3按鈕8.2.4選項框8.2.5復(fù)選框和單選按鈕8.2.6列表框8.2.7文本框8.2.8文本區(qū)8.2.9滾動條8.2.1基本用戶界面簡介Swing基本組件都是JComponent類的子類,這些組件可獨立存在于Applet和Application中,提供了小巧靈活的交互功能。JComponent類包含了一些方法來設(shè)置組件的屬性,如:改變背景顏色、定義顯示文本的字體等。JComponent的常用方法如下:
方法 作用voidsetBackground(Colorc) 設(shè)置組件的背景顏色voidsetForeground(Colorc) 設(shè)置組件的前景顏色voidsetFont(Fontf) 設(shè)置組件的字體voidisVisible() 檢查組件是否可見。組件初始為可見, 但頂層容器JFrame是個例外voidsetVisible(booleanb) 根據(jù)參數(shù)b的值顯示或隱藏組件voidsetEnable(booleanb) 啟用或禁止一個組件(默認是可使用狀態(tài))voidisEnable 檢查該組件是否正顯示在容器中voidsetLocation(intx,inty)或 設(shè)置組件的左上角位置。若組件為頂層容器,voidsetLocation(Pointp) 使用屏幕坐標;否則使用該容器的坐標PointgetLocation() 獲得組件的左上角位置。PointgetLocationOnScreen() 獲得組件左上角的位置。該值使用屏幕坐標voidsetSize(intwidth,intheight)或 重新設(shè)置組件的大小voidsetSize(Demensiond) DimensiongetSize() 得到組件的當前大小viodsetBounds(intx,inty, 設(shè)置組件的大小。x,y設(shè)置組件在容器中的坐標,intwidth,intheight) width,height設(shè)置組件的寬和高intgetBounds().width 獲取組件的寬度intgetBounds().height 獲取組件的高度intgetBounds().x 獲取組件左上角的x坐標intgetBounds().y 獲取組件左上角的y坐標voidremove(Componentc) 移走容器中的組件cvoidremoveAll() 移走容器中的所有組件8.2.2標簽(JLabel)
標簽是用戶不能修改,只能察看的文本顯示區(qū)域,它主要是顯示單行的字符串,起著傳遞消息的功能。每一個標簽用一個JLabel類的對象表示,創(chuàng)建標簽的同時應(yīng)該說明這個標簽的字符串。1.創(chuàng)建標簽JLabellabel=newJLabel(“”);2.構(gòu)造函數(shù)JLabel(Stringlabel); 構(gòu)造一個顯示內(nèi)容為label的標簽JLabel(Iconicon); 構(gòu)造一個帶有圖標的標簽JLabel(Stringlabel,intalignment); 構(gòu)造一個顯示字符串label的標簽, 并指定它的對齊方式: LEFT(左對齊)
CENTER(居中對齊)
RIGHT(右對齊)JLabel(Stringlabel,Iconicon,intalignment);用于構(gòu)造一個帶有指定文本、圖標 和對齊方式的標簽3.常用方法
publicintgetAlignment() 返回當前的對齊方式
publicStringgetText() 返回當前顯示的內(nèi)容
publicIcongetIcon() 返回標簽的圖標
publicvoidsetAlignment(intalignment) 設(shè)置對齊方式
publicvoidsetText(Stringlabel) 設(shè)置顯示的字符串
publicvoidsetIcon(Iconicon) 設(shè)置標簽的圖標4.舉例(LabelDemo.java)JApplet是一個頂層容器,Swing組建不能直接加入到JApplet,必須將組建加入到頂層容器的內(nèi)容面板中。要獲得一個內(nèi)容面板,可使用getContentPane()方法,要設(shè)置它的內(nèi)容面板可使用setContentPane()方法。8.2.3按鈕(JButton)
按鈕(button)是用來觸發(fā)特定動作的組件。在Java中提供多種形式的按鈕,其中主要是鼠標單擊觸發(fā)的按鈕。按鈕類JButton直接繼承組件類JComponent。1.創(chuàng)建按鈕JButtonbutton=newJButton(“”);2.構(gòu)造函數(shù)JButton(); 創(chuàng)建一個沒有文本的按鈕JButton(Stringlabel); 創(chuàng)建一個有指定文本的按鈕JButton(Iconicon); 創(chuàng)建一個有顯示圖標的按鈕JButton(Stringlabel,Iconicon); 創(chuàng)建一個有指定文本和圖標的按鈕3.常用方法
publicStringgetText() 返回按鈕的名字
publicvoidsetText(Stringlabel) 為按鈕設(shè)置名字
publicIcongetIcon() 返回按鈕的圖標
publicvoidsetIcon(Iconicon) 為按鈕設(shè)置圖標4.舉例(ButtonDemo.java)8.2.4選項框選項框分為復(fù)選框(JCheckBox)和單選按鈕(JRadioButton),它們都有選中和不選中兩種取值,可以通過點擊來改變他們的狀態(tài)。復(fù)選框可以讓用戶作出多項選則。單選按鈕是一組按鈕,用戶只能從中選擇一個。它們是具有開關(guān)或真假值狀態(tài)的按鈕。1.創(chuàng)建復(fù)選框JCheckBoxcheckBox=newJCheckbox();2.構(gòu)造函數(shù)JCheckBox(Strings); 創(chuàng)建一個帶有文本標簽s的復(fù)選框JCheckBox(Strings,booleanb);
創(chuàng)建一個有標簽的復(fù)選框。若b為true,表示復(fù)選框被選中JCheckBox(Iconicon); 創(chuàng)建一個帶有圖標的復(fù)選框JCheckBox(Iconicon,booleanb);
創(chuàng)建一個有圖標的復(fù)選框。若b為true,表示復(fù)選框被選中JCheckBox(Strings,Iconicon);創(chuàng)建一個帶有文本標簽和圖標的復(fù)選框JCheckBox(Strings,Iconicon,booleanb);
創(chuàng)建一個有標簽和圖標的復(fù)選框。若b為true,表示復(fù)選框被選中3.常用方法
publicbooleanisSelected() 返回復(fù)選框的狀態(tài)
publicvoidsetSelected(booleanstate)
設(shè)置復(fù)選框的狀態(tài)4.單選按鈕(JRadioButton)單選按鈕的用法同復(fù)選框。由于單選按鈕是在一組按鈕中選擇一個,所以要對單選按鈕分組。為了創(chuàng)造單選按鈕組,首先用類ButtonGroup創(chuàng)建按鈕組對象,然后用add()方法將單選按鈕加入到該按鈕組中。5.舉例(ChoiceDemo.java)8.2.5組合框(JComboBox)組合框又稱下拉列表框,是一個能從列表中選擇某個單獨項的組件。當用戶點擊它時,所有選項將被彈出,用戶可從中做出選擇。組合框分為可編輯和不可編輯的兩種,默認為不可編輯,可使用setEditable(true)將其變?yōu)榭删庉嫷模脩艏瓤梢詮牧斜碇羞x擇也可以在附帶的文本框中直接輸入文本。1.創(chuàng)建組合框首先使用構(gòu)造方法JComboBox()創(chuàng)建組合框?qū)ο?,然后調(diào)用方法addItem(Object)將表項加入到列表中。8.2.5組合框(JComboBox)2.常用方法voidsetEditable(booleanb)設(shè)置組合框的編輯狀態(tài)(true為可編輯的,false為不可編輯的)voidaddItem(Objectitem)向列表中加入表項itemvoidinsertItemAt(Objectitem,intindex)將表項item插入到列表的指定位置voidremoveItem(Objectitem)從列表中刪除表項itemvoidremoveAllItems()刪除列表中的所有表項ObjectgetItemAt(intindex)返回指定索引位置的表項的文本intgetItemCount()返回列表中的表項數(shù)目intgetSelectedIndex()返回當前選項的索引位置ObjectgetSelectedItem(intindex)返回當前被選中的表項voidsetSelectedIndex(intindex)選中在指定索引位置的表項voidsetSelectedItem(Object)選中列表中的指定表項voidsetMaxinumRowCount(intmax)設(shè)置一次能顯示出來的列表行數(shù)
3.舉例(ComboBoxDemo.java)
8.2.6列表框(JList)
列表框(JList)可以使用戶選擇多個選項,而且列表框的所有選項都是可見的。1.創(chuàng)建列表框建立一個列表框應(yīng)首先建立一個字符串數(shù)組,然后將數(shù)組傳遞給JList構(gòu)造器:Stringstr[]={“green”,”red”,”blue”};JListlist=newJList(str);
當選項數(shù)目超過了列表框的可見區(qū)域的時候,列表框的右側(cè)不會出現(xiàn)一個滾動條,不能提供自動滾動條功能。如果希望列表框能滾動,則需要將列表框加入到滾動面板中,滾動面板是能為其它組件提供滾動功能的容器。創(chuàng)建滾動面板可使用如下兩種構(gòu)造方法:JScrollPane(Component):創(chuàng)建一個包含組件的滾動面板,默認情況下,如果組件 沒有超出面板本身大小,則滾動條不出現(xiàn)。JScrollPane(Component,int,int):創(chuàng)建一個帶有組件、垂直滾動條配置和水平 滾動條配置的滾動面板??衫萌缦路椒▽L動條進行配置:8.2.6列表框(JList)(1)HORIZONTAL_SCROLLBAR_ALWAYS:水平滾動條始終出現(xiàn)(2)HORIZONTAL_SCROLLBAR_AS_NEEDED:只有需要時,水平滾動條才出現(xiàn)(3)HORIZONTAL_SCROLLBAR_NEVER:水平滾動條不出現(xiàn)(4)VERTICAL_SCROLLBAR_ALWAYS:垂直滾動條始終出現(xiàn)(5)VERTICAL_SCROLLBAR_AS_NEEDED:只有需要時,垂直滾動條才出現(xiàn)(6)VERTICAL_SCROLLBAR_NEVER:垂直滾動條不出現(xiàn)2.常用方法setVisibleRowCount(intn):設(shè)置列表框能顯示的選項數(shù)。默認顯示8個選項setSelectionMode(intmode):確定選擇方式。參數(shù)mode有三種選擇方式:
SINGLE:單選
SINGLE_INTERVAL_SELECTION:選一項或某個范圍的多個相鄰選項
MULTIPLE_INTERVAL_SELECTION:多選ObjectgetSelectedValue():返回選定的值,若選擇方式為空,則返回nullgetSelectedValues():返回選定的第一個值。如果選擇方式為空,則返回Object[]一個空數(shù)組
3.舉例(ListDemo.java)8.2.7文本框(JTextField)文本框(JTextField)是單行的文本輸入?yún)^(qū)域。1.創(chuàng)建文本框JTextFieldtextField=newJTextField(“”);2.構(gòu)造函數(shù)JTextField(); 構(gòu)造一個默認長度的文本框JTextField(intn); 創(chuàng)建一個能容納n個字符的文本框JTextField(Stringtext); 創(chuàng)建一個帶有初始字符串text的文本框JTextField(Stringtext,intn); 創(chuàng)建一個帶有初始字符串并且能容納指定長度的文本框3.常用方法
voidsetEditable(boolean) 指定文本組件是否可編輯
booleanisEditable() 返回文本組件是否可編輯的狀態(tài)
voidsetText(Stringtext) 設(shè)置文本組件的文本內(nèi)容
StringgetText()
獲取文本組件的文本內(nèi)容
StringgetSelectedText() 獲取文本組件被高亮度顯示的文本內(nèi)容4.密碼框文本框有一個特殊的子類JPasswordField,稱為密碼域,即口令文本框。在JPasswordField對象中輸入的文本會被其它指定的字符所替代,密碼域常用來在Java程序中輸入口令。密碼域的構(gòu)造方法為JPasswordField(Stringtext,intn),其中text表示要顯示的文本,n表示文本列數(shù)。創(chuàng)建一個密碼域后可調(diào)用方法setEchoChar(char)設(shè)置用戶輸入字符的回顯字符(默認為“*”),也可調(diào)用getPassword()返回密碼域中的文本,存放在一個字符數(shù)組中。5.舉例(TextFieldDemo.java)8.2.8文本區(qū)(JTextArea)文本框只能顯示一行內(nèi)容,有時滿足不了程序開發(fā)的需要,對于多行或大段文本的顯示需要使用Java提供的文本區(qū)(JTextArea)來實現(xiàn)。1.創(chuàng)建文本區(qū)JTextAreata=newJTextArea();2.構(gòu)造函數(shù)JTextArea(); 創(chuàng)建一個系統(tǒng)默認大小的文本區(qū)JTextArea(introw,intcolumns);創(chuàng)建一個指定行數(shù)和列數(shù)的文本區(qū)JTextArea(Stringtext); 創(chuàng)建一個包含初始內(nèi)容的文本區(qū)JTextArea(Stringtext,introw,intcolumns);
創(chuàng)建一個包含初始內(nèi)容并且指定行數(shù)和列數(shù)的文本區(qū)3.常用方法
publicvoidappend(Stringstr) 在文本區(qū)的最后面添加文本
publicintgetRows() 返回文本區(qū)的行數(shù)
publicvoidsetRowes(introws) 設(shè)置文本區(qū)的行數(shù)
publicintgetColumns() 返回文本區(qū)的列數(shù)
publicvoidsetColumns(intcolumns) 設(shè)置文本區(qū)的列數(shù)
publicvoidsetLineWarp(booleanb) 設(shè)置文本到達組件邊界是否轉(zhuǎn)到下一行(默認情況下,若文本區(qū)的文本超出顯示范圍,多余的文本就被剪掉)
publicvoidsetWarpStyleWord(booleanb)若b為true,表示文本到達組件邊界時,是從當前單詞開始轉(zhuǎn)到下一行;否則從當前字符轉(zhuǎn)到下一行。在Swing中,文本區(qū)不含有水平、垂直滾動條。若需要滾動條,則需要將文本區(qū)加入到滾動面板中,然后把滾動面板插入到內(nèi)容面板中。4.舉例(TextAreaDemo.java)8.2.9滾動條(JScrollBar)
滾動條(JScrollBar)是一種很直觀而簡單的控制組件。在Java語言中,它通常有兩方面的用處:一方面將它作為滑塊使用,根據(jù)其所代表的數(shù)據(jù)完成某些控制;另一方面是直接用它來實現(xiàn)窗口的滾動。創(chuàng)建滾動條時,必須要指定它的方向(垂直VERTICAL或水平HORIZONTAL,其中Java默認VERTICAL)、初始值、可見范圍的寬度、最小值和最大值。滾動條的當前值是由getValue()來獲取的,該方法返回一個整型數(shù)。1.構(gòu)造方法JScrollBar(intstyle):創(chuàng)建一個指定方向的滾動條,JScrollBar.HORIZONTAL
為水平滾動條,JScrollBar.VERTICAL為垂直滾動條。JScrollBar(intstyle,intinitvalue,intshumbsize,intmin,intmax):五個參數(shù)分別表示 方向、初始值、滾動快的大小、最小值和最大值。2.常用方法intgetValue() 獲得滾動條的當前值voidsetValue(int) 設(shè)置滾動條的當前值3.舉例(ScrollBarDemo.java)8.3組件布局管理器用容器的add()方法將組件添加到容器中后,并沒有對這些組件的位置進行設(shè)置。容器里組件的位置和大小由布局管理器決定,每個容器都有自己的默認布局方式,可通過容器的setLayout()方法重設(shè)容器的布局方式。1.順序布局(FlowLayout)順序布局是面板JPanel的默認布局方式,將組件從左至右擺放,當一行擺滿后就轉(zhuǎn)到下一行繼續(xù)擺放。當用戶對由Flow布局管理的區(qū)域進行縮放時,布局就發(fā)生變化。
舉例(FlowLayoutDemo.java)2.邊界布局(BorderLayout)邊界布局是頂層容器JWindow、JFrame、JDialog、JApplet的默認布局方式,將容器分為東、南、西、北、中五個區(qū)域,這幾個區(qū)按照“上北下南、左西右東”的分布規(guī)律進行布局,組件可以指定自己放在哪個區(qū)域。因為只有5個區(qū),所以最多只能容納5個組件。當窗口縮放時,組件相應(yīng)的位置不變化,但其大小改變??捎谜Z句setLayout(newBorderLayout());設(shè)置容器的布局為邊界布局。
voidadd(Strings,Componentcomobj)
其中:s指定組件加入的位置(North,South,East,West,Center) comobj表示要加入的組件。舉例(BorderLayoutDemo.java)3.網(wǎng)格布局(GridLayout)網(wǎng)格布局是在一個二維網(wǎng)格中布置組件,須定義行數(shù)和列數(shù)。網(wǎng)格布局適合于數(shù)量較多的組件。向網(wǎng)格中添加組件的順序是先向第一行第一格中添加第一個組件,然后是第一行第二格等等,第一行全部添加完畢后,開始第二行的添加,以此類推。組件的相應(yīng)位置不隨區(qū)域的縮放而改變,只是組件的大小改變。可用下面的語句設(shè)置容器的布局為網(wǎng)格布局:setLayout(newGridLayout(introw,intcol));舉例(GridLayoutDemo.java)4.網(wǎng)格包布局(GridBagLayout)網(wǎng)格包布局是網(wǎng)格布局的一個擴展,網(wǎng)格布局中所有組件被布局管理器設(shè)為默認大小,且大小相同;而網(wǎng)格包布局可排列大小不同的組件,只需指定組件占用的單元即可。
GridBagLayout語句可將容器的布局方式設(shè)置為網(wǎng)格包布局,具體步驟如下:(1)創(chuàng)建一個GridBagLayout對象,并調(diào)用setLayout方法將該對象指定為布局管理器;(2)創(chuàng)建網(wǎng)格包約束對象GridBagConstraints,此對象用來設(shè)定組件在布局中的屬性(如位置、大小等);(3)用setConstraint方法將網(wǎng)格包約束條件傳給布局管理器,最后添加組件。
setConstraint方法的格式如下:voidsetConstraint(Componentcomp,GridBagConstraintsconstraints)
使用GridBagConstraints時要滿足一定的約束條件,主要有:(1)gridx和gridy:指定組件擺放的行和列值。默認值為RELATIVE,表示該組件緊接著上一個擺放,二者都為0表示擺放在左上角。(2)gridwidth和gridheight:指定組件在橫向和縱向上占有的網(wǎng)格數(shù)。設(shè)為常量REMAINDER表示把橫向和縱向剩下的方格都分配給該組件。(3)weightx和weighty增量字段:用來設(shè)置縮放容器時,各組件分配的寬度和高度的比例數(shù),若希望縮放時組件的大小不變,則將組件的增量設(shè)為0。(4)fill和anchor:如果組件分配的空間大于它所需要的空間時,GridBagLayout會根據(jù)fill的值調(diào)整該組件的大小。fiill是類GridBagConstraints中定義的四個類變量之一:
GridBagConstraints.NONE(默認值)
GridBagConstraints.BOTH(在水平和垂直方向上都擴展)
GridBagConstraints.HORIZONTAL(在水平方向上擴展)GridBagConstraints.VERTICAL(在垂直方向上擴展)如果組件未填充整個網(wǎng)格,通過設(shè)置anchor來指定它的位置。取值如下:GridBagConstraints.NORTH、GridBagConstraints.SOUTH、GridBagConstraints.EAST、GridBagConstraints.WEST、GridBagConstraints.NORTHEAST等。(5)ipadx、ipady和insets:ipadx,ipady用來設(shè)置面板內(nèi)各個組件左右和上下間隙大?。ㄒ韵笏貫閱挝唬?。Insets變量是Insets類的一個實例,用來判斷環(huán)繞面板本身的間隙大小。類Insets包含了用于頂部、底部、左側(cè)和右側(cè)插入空間的值,這些值用在面板本身的繪制。舉例(GridBagLayoutDemo.java)5.卡片布局卡片布局是將容器的組件進行編號,象卡片一樣堆放起來,每次只顯示一個。通過CardLayout類提供的show()方法可顯示指定標號的組件。setLayout(newCardLayout());//設(shè)置容器的布局為卡片布局voidadd(Strings,Componentcomobj)
其中s指定組件的編號;comobj表示被加入的組件。show(Objectname,Strings)
其中name為容器對象名;s為組件的編號。舉例(CardLayoutDemo.java)6.面板的使用面板(JPanel)是一個容器,組件可以直接添加到面板中,也可以把面板放到另一個更大的面板中實現(xiàn)面板的嵌套,還可以使用方法setContentPane()把面板設(shè)為頂層容器的內(nèi)容面板。使用面板的目的就是為了分層次、分區(qū)域管理各種組件,通過各個面板的布局管理器對本身的組件進行管理,達到布局美觀合理。舉例(PanelDemo.java)7.手工布局在Java中,不但可以使用布局管理器,也可以不使用它而直接手工放置各個組件。舉例(NoLayoutDemo.java)8.4事件處理在Java中,程序和用戶的交互是通過響應(yīng)各種事件來實現(xiàn)的。當用戶操作GUI組件時會引發(fā)各種事件,Java虛擬機就會將事件的消息傳遞給程序,由程序中的事件處理方法對事件進行處理。系統(tǒng)根據(jù)用戶的操作構(gòu)造出相應(yīng)事件類的對象,如鼠標的移動、單擊某按鈕、鍵盤的單擊等。Java用Event類的對象來保存和表示事件,當用戶在程序的運行過程中引發(fā)一個系統(tǒng)可以識別的事件時,系統(tǒng)將自動創(chuàng)建一個Event類的對象來表示這個事件,并在這個對象中保存該事件的相關(guān)信息。在Java中采用了委托型事件處理模式,即對象本身沒有成員方法來處理事件,而是將事件委托給事件監(jiān)聽者處理,每個事件有一個相應(yīng)的監(jiān)聽者接口,它規(guī)定了能夠接收(并處理)該類事件的方法的規(guī)范。監(jiān)聽者實現(xiàn)了監(jiān)聽者接口的類,它包含有事件處理程序。每一個AWT對象至少注冊一個listener對象,以便處理AWT對象的事件。編程人員要為事件源指定監(jiān)聽者對象(即指定處理某種事件的事件處理程序)。事件的產(chǎn)生者稱為事件源。對事件進行處理的類叫做事件監(jiān)聽者。如果希望對事件進行處理,可調(diào)用事件源的注冊方法把事件監(jiān)聽者注冊給事件源,當事件源發(fā)生事件時,事件監(jiān)聽者就代替事件源對事件進行處理,這就是委托。委托的方法如下:Source.addxxxListener(EventListener);Java有20多個預(yù)定義事件類,它們包含了所有組件上可能發(fā)生的事件。每個事件都有一個相應(yīng)的事件接口,事件接口的事件處理方法完成對事件的處理。因此事件監(jiān)聽者的任務(wù)就是要實現(xiàn)相應(yīng)的事件接口。4.4.1事件監(jiān)聽者
事件監(jiān)聽者是一種處理事件的接口,定義于java.awt.event包中,在此包中也定義了各種事件類。當事件源對象因用戶的操作(鼠標或鍵盤)而產(chǎn)生事件時,系統(tǒng)會自動觸發(fā)此事件類對象E,并通知所委托之事件監(jiān)聽者A(若來源對象已向A注冊),然后事件監(jiān)聽者A中所定義之處理各種事件的方法(事件處理者1~n)便會處理此事件E的各種狀況。來源對象向事件監(jiān)聽者A注冊事件監(jiān)聽者A事件處理者2事件處理者n事件處理者1用戶操作產(chǎn)生事件E4.4.2Java常用事件、事件源、接口和方法事件 事件源事件接口名稱 實現(xiàn)方法ActionEvent JButton ActionListener actionPerformed(ActionEvent) JCheckBox JRadioButton JTextField JTextArea JMenuItemListSelectionEventJlist ListSelectionListenervalueChanged()AdjustmentEvent JScrollbar AdjustmentListener adjustmentValueChangedItemEvent JComboBox ItemListener itemStateChanged(ItemEvent)MouseMotionEvent Component MouseMotionListener mouseDragged(MouseEvent) mouseMoved(MouseEvent) mousePressed(MouseEvent) mouseReleased(MouseEvent)MouseEvent Component MouseListener mouseEntered(MouseEvent) mouseExited(MouseEvent) mouseClicked(MouseEvent)FocusEvent Component FocusListener focusGained focusLost
事件 事件源 事件接口名稱 實現(xiàn)方法
keyPressed(KeyEvent)KeyEvent Component KeyListener keyReleased(KeyEvent) keyTyped(KeyEvent) windowClosing(WindowEvent) windowOpened(WindowEvent) windowIconified(WindowEvent)WindowEvent JWindow WindowListener windowDeiconified(WindowEvent) windowClosed(WindowEvent) windowActivated(WindowEvent) windowDeactivated(WindowEvent)DocumentEvent JTextField DocumentListener insertUpdate() JTextArea removeUpdate() ChangedUpdate()ComponentEvent Component ComponentListener componentMoved componentHidden componentResized componentShownContainerEvent Container ContainerListener componentAdd componentRemovedgetSource()返回產(chǎn)生事件的對象,該方法適用于所有的事件getActionCommand()獲得事件源的命令名稱getItemSelectable()返回產(chǎn)生事件的事件源getItem()返回發(fā)生事件的項目getAdjustmentType()返回調(diào)節(jié)類型getValue()返回發(fā)生事件的調(diào)整值4.4.3事件處理編程范例例1按鈕事件的處理例2列表事件處理例3文本區(qū)事件處理例4滾動條事件處理例5鍵盤事件舉例例6鼠標事件舉例例5鍵盤事件舉例當鍵盤上的某個按鍵被按下時,會產(chǎn)生一個KEY_PRESSED事件;當用戶釋放該鍵時,會產(chǎn)生KEY_RELEASE事件。鍵盤事件由KeyListener中的三個方法來處理,分別是:publicvoidkeyPressed(KeyEvente)處理按鍵按下事件PublicvoidkeyReleased(KeyEvente)處理按鍵釋放事件PublicvoidkeyTyped(KeyEvente)處理按鍵生成的字符
getKeyChar()方法用來返回用戶鍵入的字符
getKeyCode()方法用來返回鍵盤事件的虛擬鍵代碼,虛擬鍵代碼通過前綴VK_對應(yīng)鍵盤上的按鍵。舉例(keyDemo.java)適配器類
Java語言為許多方法事件接口提供了Adapter(適配器)類,如:MouseAdapter、WindowAdapter、KeyAdapter等。這些Adapter類實現(xiàn)了相應(yīng)的事件接口,類中的方法是空的,繼承Adapter類時,重寫所需的方法即可。舉例(keyDemo2.java)8.5高級圖形用戶界面Java的高級圖形用戶界面組件主要包括窗口、菜單和對話框等,它們可以構(gòu)成標準GUI應(yīng)用程序。8.5.1顏色和字體1.顏色常用顏色表顏色常量色彩 RGB值 顏色常量色彩RGB值
black 黑色 (0,0,0) magenta 洋紅(255,0,255)blue 藍色 (0,0,255) orange 橙色(255,200,0)cyan 青色 (0,255,255) pink 粉紅(255,17,275)darkGray灰黑 (64,64,64) red 紅色(255,0,0)gray 灰色 (128,128,128) white 白色(255,255,255)green 綠色 (0,255,0) yellow 黃色(255,255,0)lightGray淺灰 (192,192,192)(1)構(gòu)造方法Color(floatr,floatg,floatb)指定三原色R、G、B的浮點值Color(intr,intg,intb) 指定三原色R、G、B的整數(shù)值Color(intrgb) 指定一個二進制整數(shù)來代表三原色的混合色:
16~23位代表紅色
8~15位代表綠色
0~7位代表藍色。(2)常用方法setColor(Colorc) 設(shè)置繪圖顏色setBackground(Colorc) 設(shè)置背景色setForeground(Colorc) 設(shè)置前景色getColor(Colorc) 獲取繪圖顏色getBackground(Colorc) 獲取背景色getForeground(Colorc) 獲取前景色2.字體
Java通過Font類處理字體。Font類的構(gòu)造方法如下:Font(Stringname,intstyle,intsize)其中的三個參數(shù)分別代表字體名稱、風格、大小。
Java提供了5種邏輯字體:Dialog、SansSerif、Monospaced、Serif和DialogInput,并將它們映射為計算機上的物理字體。如:在Windows系統(tǒng)上,SansSerif對應(yīng)為Arial。如果使用了計算機不支持的字體,Java將以該計算機的默認字體來代替。設(shè)定字體風格的常量:Font.BOLD(加粗)、Font.ITALIC(傾斜)、Font.PLAIN(正常),也可將它們疊加在一起得到組合的效果。字體大小是以點來衡量的,一個點是1/72英寸,可選取整數(shù)值。創(chuàng)建字體后,可調(diào)用setFont()方法將其設(shè)置為當前字體。常用方法:
intgetStyle():返回當前字體的風格的整數(shù)值
intgetSize():返回當前字體大小的整數(shù)值
StringgetName():返回當前字體名稱的字符串
StringgetFamily():返回當前字體家族名稱的字符串booleanisPlain():返回當前字體是否是正常字體
booleanisBold():返回當前字體是否是黑體
booleanisItalic():返回當前字體是否是斜體舉例(ColorFontDemo.java)8.5.2窗口、框架、對話框窗口(JWindow)、框架(JFrame)、對話框(JDialog)和小應(yīng)用程序(JApplet)是Swing的四個頂層容器,它們構(gòu)成圖形用戶界面的主體,他們不允許直接加入組件。通常情況下,組件被加入到容器的內(nèi)容面板(contentpane)中。要獲得一個內(nèi)容面板,可使用getContentPane()方法,要設(shè)置它的內(nèi)容面板可使用setContentPane()方法。將組件加入到一個容器的內(nèi)容面板中,步驟如下:(1)創(chuàng)建一個面板;(2)使用方法add(Component)將組件加入到面板中;(3)用面板作為參數(shù)來調(diào)用方法setContentPane(Container)。1.窗口(JWindow)窗口能夠顯示在用戶的桌面上,沒有標題欄、最大化、最小化和關(guān)閉按鈕。這種無邊框的窗口通常用在程序首次啟動和動畫程序中,但在圖形用戶界面中一般不會直接產(chǎn)生JWindow對象,而是使用JFrame類。2.框架(JFrame)框架是一個功能齊全的窗口,它帶有標題欄、窗口管理按鈕,可在其中添加組件,框架是通過Jframe類生成的,JFrame類的構(gòu)造方法如下:JFrame() 創(chuàng)建無標題的窗口JFrame(Strings) 創(chuàng)建有標題的窗口框架在創(chuàng)建時是不可見的,需調(diào)用方法setVisible(true)或show()設(shè)為可見。對應(yīng)setVisible(false)或hide()設(shè)為不可見的。JFrame從基類Frame繼承的常用方法如下:setTitle(Strings):設(shè)置框架的標題setIconImage(Imageimage):設(shè)置框架圖標的圖像setResizable(Booleanb):設(shè)置窗口是否可調(diào)整大小(默認可調(diào)整)setSize(intwidth,intheight):設(shè)置窗口的寬高setBounds(intx,inty,intwidth,intheight):設(shè)置窗口的左上角坐標和寬高pack():用緊湊方式顯示窗口dispose():關(guān)閉窗口并收回創(chuàng)建窗口的系統(tǒng)資源。舉例(FrameDemo.java)3.對話框?qū)υ捒蚍譃橛心J胶蜔o模式兩種。有模式對話框打開后必須做出響應(yīng),在處理完之前,用戶不能同應(yīng)用程序的主窗口進行交互,只有用戶關(guān)閉此對話框后,應(yīng)用程序才能繼續(xù)。無模式對話框則可以響應(yīng)對話框以外的其它事件,無模式對話框打開后,用戶能夠同時與應(yīng)用程序窗口進行交互。創(chuàng)建對話框最方便的方法是使用JOptionPane類,這是一些小窗口,用來詢問問題、警告用戶、提供簡單的重要信息等。這些對話框都是有模式對話框,用戶不需要創(chuàng)建新的類來表示這些窗口,也不用編寫事件處理方法來接收輸入,僅需要一條語句就可以建立起多變的對話框,類JOptionPane可用來創(chuàng)建四種標準對話框,如下表所示。標準對話框名稱 含義Confirm確認對話框 顯示一條信息,并等待用戶點擊OK按鈕Input輸入對話框 顯示一條信息,要求用戶完成一行輸入Message消息對話框 顯示一條信息,并得到用戶的確認Option對話框 顯示一條信息,并得到用戶在一組選項中的選擇
這四種對話框外觀布局都有相似之處,左邊有一圖標,對應(yīng)對話框信息的類型,下方有一個或多個選項按鈕,并且要為用戶提供信息。在對話框構(gòu)造方法重要設(shè)置一些參數(shù),來定制所需的對話框,他們共有的參數(shù)的功能如下:
Component:該參數(shù)指出了對話框從屬哪個容器,即該對話框的擁有者,若為null,則以“默認的”窗口為此對話框的擁有者。Object:可以是一個字符串、一個組件或者一個圖標對象,如果它是一個字符串,該文本會被顯示在對話框中;如果它是一個組件或圖標,該對象會被顯示出來取代文本信息。往對話框中添加不同的組件,會實現(xiàn)不同的功能。
String:定義標題欄要顯示的字符串。
IntmessageType:它描述了對話框的類型,相應(yīng)的對話框左側(cè)的圖標反映了這種類型的不同。有五種類型可選,分別是:ERROR_MESSAGE、INFORMATION_MESSAGE、PLAIN_MESSAGE、QUESTION_MESSAGE或者WARING_MESSAGE,用戶也可以提供自己的替代圖標。
IntoptionType:它指明了哪種選項按鈕被顯示出來,用戶可以選擇四種選項類型中的一種:DEFAULT_OPTION、YES_NO_OPTION、YES_NO_CANCEL_OPTION和OK_CANCEL_OPTION,反映了用戶的響應(yīng)。(1)Confirm確認對話框:有兩個構(gòu)造方法,分別為intshowConfirmDialog(Component,Object)和intshowConfirmDialog(Component,Object,String,int,int)返回值為YES_OPTION、NO_OPTION或CANCEL_OPTION。(2)Input對話框:會詢問一個問題,并用一個文本框來存儲對它的響應(yīng),返回值為一字符串,有兩個方法,分別是:StringshowInputDialog(Component,Object)和StringshowInputDialog(Component,Object,String,int)(3)Message對話框:用來顯示信息的簡單窗口,與其它對話框不同,它不返回任何值,有兩種方法,分別是:voidshowMessageDialog(Component,Object)和voidshowMessageDialog(Component,Object,String,int)(4)Option對話框:集成了所有其它對話框的特性。通過如下的方法來構(gòu)造:showOptionDialog(Component,Object,String,int,int,Icon,Object[],object)
前三個參數(shù)表示父組件,要顯示的文本、圖標或組件,對話框的標題。第四個參數(shù)表示對話框的類型,使用類變量YES_NO_OPTION或YES_NO_CANCEL_OPTION。第五個參數(shù)描述了對話框的類型,第六個參數(shù)表示要顯示的一個Icon對象,它代替前一個參數(shù)的圖標。第七個參數(shù)是一個對象數(shù)組,在YES_NO_OPTION或YES_NO_CANCEL_OPYION沒有使用的情況下(第四個參數(shù)為0),存放在對話框中做出選擇的組件和其他對象。最后一個參數(shù)是在沒有使用YES_NO_OPTION或YES_NO_CANCEL_OPTION時設(shè)置默認選項。舉例(DialogDemo1.java)
除使用JOptionPane顯示信息外,還需要經(jīng)常訪問文件系統(tǒng),文件選擇器JFileChooser類提供了從文件系統(tǒng)中進行文件選擇的界面。文件選擇器實際上并不能打開或保存文件,它只是幫助找到要打開或保存的文件對象,要想真正實現(xiàn)打開或保存,還要使用文件的輸入、輸出系統(tǒng)。JFileChooser類能夠創(chuàng)建有模式文件對話框,分為文件打開對話框和文件關(guān)閉對話框,其創(chuàng)建步驟如下:(1)創(chuàng)建一個JFileChooser對象:JFileChooserchooser=newJFileChooser();(2)將文件選擇器設(shè)為可見,調(diào)用showOpenDialog或showSaveDialog來顯示對話框:intreturnvalue=choose.showOpenDialog(parent);parent定義了對話框的擁有者,parent為null時,使用默認擁有者。當用戶單擊確定按鈕則返回JFileChooser.APPROVE_OPTION,單擊取消按鈕則返回JFileChooser.CANCEL_OPTION。
文件對話框的常用方法如下:
chooser.setCurrentDirectory(newFile(*.*)):設(shè)置當前目錄
chooser.getCurrentDirectory():獲取當前目錄
chooser.setMultiSelectionEnable(true):允許用戶選擇多個文件
chooser.setSelectedFile(newFile(filename)):使用默認文件名
Stringfilename=chooser.getSelectedFile():得到選擇的一個文件
Stringfilename=chooser.getSelectedFiles
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國無縫化管加熱爐數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國增強尼龍電子斷電轉(zhuǎn)把數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國壓路機參數(shù)顯示系統(tǒng)數(shù)據(jù)監(jiān)測研究報告
- 2025年移液吸嘴項目可行性研究報告
- 五年級數(shù)學(小數(shù)四則混合運算)計算題專項練習及答案
- 四年級數(shù)學(小數(shù)加減運算)計算題專項練習與答案
- 網(wǎng)絡(luò)安全居間服務(wù)合同樣本
- 教堂裝修包清工合同模板
- 互聯(lián)網(wǎng)醫(yī)療居間協(xié)議模板
- 初中物理實驗室課外活動計劃
- 不同茶葉的沖泡方法
- 光伏發(fā)電并網(wǎng)申辦具體流程
- 基本藥物制度政策培訓課件
- 2025年中國華能集團限公司校園招聘高頻重點提升(共500題)附帶答案詳解
- 建筑勞務(wù)專業(yè)分包合同范本(2025年)
- GB/T 45002-2024水泥膠砂保水率測定方法
- 廣東省廣州海珠區(qū)2023-2024學年八年級上學期期末數(shù)學試卷(含答案)
- 飛行原理(第二版) 課件 第10章 高速空氣動力學基礎(chǔ)
- 廣西《乳腺X射線數(shù)字化體層攝影診療技術(shù)操作規(guī)范》
- 山西省2024年中考道德與法治真題試卷(含答案)
- 五年(2020-2024)高考地理真題分類匯編(全國版)專題12區(qū)域發(fā)展解析版
評論
0/150
提交評論