版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第六章組件和事件的處理機(jī)制技能目標(biāo)能運(yùn)用布局管理器及各種可視組件設(shè)計(jì)應(yīng)用程序圖形界面。知識(shí)目標(biāo)掌握常用可視組件的用法掌握容器組件的布局樣式掌握事件驅(qū)動(dòng)機(jī)制項(xiàng)目任務(wù)本項(xiàng)目完成輸入學(xué)生的姓名、性別、個(gè)人愛(ài)好與籍貫信息并輸出。學(xué)生的信息輸入形式是借助于圖形化的用戶(hù)界面實(shí)現(xiàn)的。為方便用戶(hù)的輸入,在圖形化界面中使用了很多的可視組件。本章要點(diǎn)主要內(nèi)容6.1圖形用戶(hù)界面概述6.2常用可視化組件6.3布局管理器6.4事件處理機(jī)制6.1圖形用戶(hù)界面概述用戶(hù)界面是軟件開(kāi)發(fā)中的一項(xiàng)重要工作。用戶(hù)界面是計(jì)算機(jī)的使用者——用戶(hù)與計(jì)算機(jī)系統(tǒng)交互的接口,用戶(hù)界面功能是否完善、方便,將直接影響用戶(hù)對(duì)應(yīng)用軟件的使用。GUI(GraphicalUserInterface圖形用戶(hù)界面)使用圖形方式借助菜單、按鈕等標(biāo)準(zhǔn)界面元素和鼠標(biāo)操作,幫助用戶(hù)方便地向計(jì)算機(jī)系統(tǒng)發(fā)出命令,啟動(dòng)操作,并將系統(tǒng)運(yùn)行的結(jié)果以圖形的方式顯示給用戶(hù)。設(shè)計(jì)和實(shí)現(xiàn)圖形用戶(hù)界面的工作主要兩個(gè):①創(chuàng)建組成界面的各元素,指定它們的屬性和位置關(guān)系,構(gòu)成完整的圖形用戶(hù)界面的外觀。②定義圖形用戶(hù)界面的事件和各界面元素對(duì)不同事件的響應(yīng),實(shí)現(xiàn)與用戶(hù)的交互。6.1圖形用戶(hù)界面概述Java基類(lèi)(JavaFoundationClasses,JFC)是關(guān)于GUI組件和服務(wù)的完整集合,主要由5個(gè)API構(gòu)成:AWT、Swing、Java2D、DragandDrop、AccessibilityJFCSwingAWTJava2DDragandDropAccessibility6.1圖形用戶(hù)界面概述6.1圖形用戶(hù)界面概述
AWT組件庫(kù)為Java應(yīng)用程序提供了多種GUI工具。
Swing提供了一整套用Java語(yǔ)言編寫(xiě)的GUI組件,以保證
可移植性。
Java2D是一種圖形API,提供了高級(jí)的二維圖形圖像處
理類(lèi)的集合。
DragandDrop技術(shù)提供了Java和本地應(yīng)用程序之間的交
互性(交換數(shù)據(jù)等)。
AccessibilityAPI輔助開(kāi)發(fā)使用非傳統(tǒng)輸入輸出方式(語(yǔ)
音)的應(yīng)用程序。AWT
AWT(AbstractWindowToolkit抽象工具包)是一個(gè)獨(dú)立平臺(tái)的窗口工具組件集。AWT的作用是給用戶(hù)提供基本的界面組件,如按鈕、列表框、菜單等。只提供按鈕、滾動(dòng)條等最基本的組件,而不提供TreeView等現(xiàn)代化GUI組件,并且AWT組件只提供基本的功能,如按鈕上只能出現(xiàn)文字不能出現(xiàn)圖形。不能跨平臺(tái)。AWT組件通過(guò)相應(yīng)的本地組件與操作系統(tǒng)溝通,不同操作系統(tǒng),繪制出來(lái)的界面可能不同。
6.1圖形用戶(hù)界面概述java.lang.ObjectColor顏色Font字體Component組件BorderLayout,FlowLayoutCardLayout,GridBagLayot布局類(lèi)CheckboxGroup復(fù)選框組Image圖象AWTEvent事件MenuComponent菜單組件Graphics圖形java.awt中的各個(gè)類(lèi)
6.1圖形用戶(hù)界面概述SwingSwing是建立在AWT基礎(chǔ)之上的,解決了AWT不能跨平臺(tái)的問(wèn)題,它利用了AWT的底層組件,包括圖形、顏色、字體、工具包和布局管理器等。通過(guò)引入新特性和豐富的功能,Swing提供了比AWT更全面的組件集合。SwingAPI是圍繞實(shí)現(xiàn)AWT各個(gè)部分的API構(gòu)建的,這保證了所有早期的AWT組件仍然可以使用。
大多數(shù)AWT組件只要在其類(lèi)名前加J即可轉(zhuǎn)換成Swing組件。Swing組件均是以AWT的Container類(lèi)為基礎(chǔ)開(kāi)發(fā)的Javax.swing組件從功能上可分為:(1)頂層容器:JFrame,JApplet,JDialog,JWindow共4個(gè)。(2)中間容器:JPanel,JScrollPane,JSplitPane,JToolBar等。(3)特殊容器:在GUI上起特殊作用的中間層,如JInternalJFrame,JLayeredPane,JRootPane等。(4)基本控件:實(shí)現(xiàn)人機(jī)交互的組件,如Jbutton,JComboBox,JList,JMenu,JSlider,JTextField等。(5)不可編輯信息的顯示:向用戶(hù)顯示不可編輯信息的組件,例如JLabel,JProgressBar,ToolTip等。(6)可編輯信息的顯示:向用戶(hù)顯示能被編輯的格式化信息的組件,
如JColorChooser,JFileChoose,JFileChooser,JTextArea等。Swing組件的分類(lèi)Java語(yǔ)言中,設(shè)計(jì)和實(shí)現(xiàn)GUI主要分為三個(gè)主要步驟:1.創(chuàng)建組件(component),建立可以顯示的元素2.指定布局(layout),排列組件位置3.響應(yīng)事件(event),與用戶(hù)產(chǎn)生交互6.2組件
組件(component)是構(gòu)成圖形用戶(hù)界面的基本成分和核心元素。組件類(lèi)(Component)是一個(gè)抽象類(lèi),是AWT組件類(lèi)層次結(jié)構(gòu)的基類(lèi),實(shí)際使用的組件都是Component類(lèi)的子類(lèi)。Component類(lèi)提供對(duì)組件操作的通用方法,包括設(shè)置組件位置、設(shè)置組件大小、設(shè)置組件字體、響應(yīng)鼠標(biāo)或鍵盤(pán)事件、組件重繪等。javax.swing包中的JComponent類(lèi)是java.awt包中Container類(lèi)的一個(gè)直接子類(lèi)。Component類(lèi)是其他組件類(lèi)的父類(lèi),該類(lèi)的一些方法可直接繼承到子類(lèi)中。(1)
setFont(Fontf):設(shè)置組件的字體。(2)
setForeground(Colorr):設(shè)置組件的前景色。(3)
setLocation(intx,inty):設(shè)置組件的顯示位置。(4)
setSize(intwidth,intheight):調(diào)整組件的大小,使其寬度為width,高度為height。(5)
setVisible(booleanb):根據(jù)參數(shù)b的值顯示或隱藏此組件。(6)
getForeground():獲得組件的前景色。(7)
getFont():獲得組件的字體。(8)
getBackground():獲得組件的背景色。(9)
getHeight():返回組件的當(dāng)前高度。(10)
invalidate():使此組件無(wú)效。(11)
getBounds():以Rectangle對(duì)象的形式獲得組件的邊界。Component(1)按鈕(JButton)按鈕是一個(gè)常用組件,按鈕可以帶標(biāo)簽或圖象。按鈕常用的構(gòu)造方法如下:①publicJButton(Iconicon):按鈕上顯示圖標(biāo)。②publicJButton(Stringtext):按鈕上顯示的文本為text。③publicJButton(Stringtext,Iconicon):創(chuàng)建名字是text且?guī)в袌D標(biāo)icon的按鈕。
按鈕常用的實(shí)例方法如下:①publicvoidsetText(Stringtext):按鈕調(diào)用該方法可以重新設(shè)置當(dāng)前按鈕的名字,名字由參數(shù)text指定。②publicStringgetText():按鈕調(diào)用該方法可以獲取當(dāng)前按鈕上的名字。③publicvoidsetIcon(Iconicon):按鈕調(diào)用該方法可以重新設(shè)置當(dāng)前按鈕上的
圖標(biāo)。常用可視組件
(2)標(biāo)簽(JLabel)JLabel類(lèi)負(fù)責(zé)創(chuàng)建標(biāo)簽對(duì)象,標(biāo)簽用來(lái)顯示信息,但沒(méi)有編輯功能。標(biāo)簽常用構(gòu)造方法如下:①publicJLabel():創(chuàng)建沒(méi)有名字的標(biāo)簽。②publicJLabel(Strings):創(chuàng)建名字是s的標(biāo)簽。③publicJLabel(Strings,intaligment):創(chuàng)建名字是s,對(duì)齊方式是aligment的標(biāo)簽。aligment取值為JLabel.LEFT,JLabel.RIGHT,JLabel.CENTER。④publicJLabel(Iconicon):創(chuàng)建具有圖標(biāo)icon的標(biāo)簽,icon在標(biāo)簽中左對(duì)齊。按鈕常用實(shí)例方法如下:①publicStringgetText():獲取標(biāo)簽的名字。②publicvoidsetText(Strings)設(shè)置標(biāo)簽的名字是s。③publicvoidsetIcon(Iconicon)設(shè)置標(biāo)簽的圖標(biāo)是icon。常用可視組件
(3)文本框(JTextField)JTextField創(chuàng)建的一個(gè)對(duì)象就是一個(gè)文本框。用戶(hù)可以在文本框輸入單行的文本。文本框的主要構(gòu)造方法如下:①publicJTextField(intx):如果使用這個(gè)構(gòu)造方法創(chuàng)建文本框?qū)ο?,文本框的可?jiàn)字符個(gè)數(shù)由參數(shù)x指定。②publicJTextField(Strings):如果使用這個(gè)構(gòu)造方法創(chuàng)建文本框?qū)ο?,則文本框的初始字符串為s.文本框常用實(shí)例方法如下:①publicvoidsetText(Strings):文本框?qū)ο笳{(diào)用該方法可以設(shè)置文本框中的文本為參數(shù)s指定的文本。②publicStringgetText():文本框?qū)ο笳{(diào)用該方法可以獲取文本框中的文本。③publicvoidsetEditable(booleanb):文本框?qū)ο笳{(diào)用該方法可以指定文本框的可編輯性。常用可視組件
容器(Container)是組件(Component)的抽象子類(lèi),是一種特殊的組件,在該類(lèi)中允許裝入其他的組件,要裝入的組件也可以是容器,這樣可以創(chuàng)建完整的層次結(jié)構(gòu)。
容器有助于在屏幕上布置GUI組件。最常用的容器是Panel(面板)、Frame(框架)和Dialog(對(duì)話(huà)框)。
容器
容器
Java把由Container的子類(lèi)或間接子類(lèi)創(chuàng)建的對(duì)象稱(chēng)為一個(gè)容器。容器類(lèi)的常用方法:①publicvoidadd():一個(gè)容器調(diào)用這個(gè)方法將組件添加到該容器中。②publicvoidremoveAll():容器調(diào)用removeAll()方法可以移掉容器中的全部組件。③publicvoidremove(Componentc):調(diào)用remove(Componentc)方法可以移掉容器中參數(shù)指定的組件。④publicvoidvalidate():每當(dāng)容器添加新的組件或移掉組件時(shí),應(yīng)該讓容器調(diào)用validate()方法,以保證容器中的組件能正確顯示出來(lái)。1)框架(JFrame)框架是一個(gè)不被其它窗體所包含的獨(dú)立的窗體,是在Java圖形化應(yīng)用中容納其它用戶(hù)接口組件的基本單位。JFrame類(lèi)是用來(lái)創(chuàng)建一個(gè)窗體的。框架的構(gòu)造方法如下:①publicJFrame():聲明并創(chuàng)建一個(gè)沒(méi)有標(biāo)題的JFrame對(duì)象。②publicJFrame(Stringtitle):聲明并創(chuàng)建一個(gè)指定標(biāo)題為title的JFrame對(duì)象??蚣艿膶?shí)例方法如下:①publicvoidadd(Componentcomp):在框架中添加組件comp。②publicvoidsetLayout(LayoutManagermgr):設(shè)置布局方式。③publicvoidsetTitle(Stringtitle):設(shè)置框架的標(biāo)題。④publicStringgetTitle(Stringtitle):獲取框架的標(biāo)題。容器
容器
⑤publicvoidsetBounds(inta,intb,intwidth,intheight):設(shè)置出現(xiàn)在屏幕上時(shí)的初始位置為(a,b),即距屏幕左面a個(gè)像素、距屏幕上方b個(gè)像素,窗口的寬是width,高是height。⑥publicvoidsetResizable(booleanb):設(shè)置窗口是否可調(diào)整大小,默認(rèn)窗口是可以調(diào)整大小的。⑦publicvoidsetDefaultCloseOperation(intoperation):單擊窗體右上角的關(guān)閉圖標(biāo)后,程序作出處理。operation取值為Jframe.DO_NOTHING_ON_CLOSE;Jframe.HIDE_ON_CLOSE;Jframe.EXIT_ON_CLOSE
建立一個(gè)框架importjavax.swing.*;importjava.awt.*;publicclassMyFrame{publicstaticvoidmain(Stringargs[]){JFramef=newJFrame("第一個(gè)窗口程序");//JFrame在javax.swing包中
f.setSize(220,140);f.setLocation(300,200);
f.setVisible(true);f.getContentPane().setBackground(Color.red);//Color在java.awt中f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//按關(guān)閉則退出程序}}importjavax.swing.*;publicclassF{publicstaticvoidmain(Stringargs[])
{JFramefra=newJFrame("ButtApp");fra.setSize(250,170);fra.setLayout(null);//關(guān)閉布局設(shè)置JButtonbutt=newJButton("click");butt.setSize(100,50);butt.setLocation(75,60);
fra.add(butt);fra.setVisible(true);
}}2)面板(JPanel)面板(JPanel)用于容納界面元素,以便在布局管理器的設(shè)置下可容納更多的組件,實(shí)現(xiàn)容器的嵌套。框架與面板盡管都是容器,但框架可以獨(dú)立顯示,但面板一般要嵌入到框架中顯示,框架可以帶標(biāo)題、菜單條等,但面板不帶。容器
importjavax.swing.*;importjava.awt.*;classMyFrame{publicstaticvoidmain(Stringargs[]){JFramef=newJFrame("加入面板的框架");f.setLayout(newGridLayout(2,1));//把框架分上下兩部分
JPanelp1=newJPanel();
JPanelp2=newJPanel();p1.setBackground(Color.red);//設(shè)置p1面板的背景色為紅色
p2.setBackground(Color.green);//設(shè)置p2面板的背景色為綠色
f.add(p1);f.add(p2);f.setSize(220,140);f.setLocation(300,200);f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}importjavax.swing.*;publicclassF{publicstaticvoidmain(Stringargs[])
{JFramefra=newJFrame("文本框程序");
JTextFieldtxt1=newJTextField(50);JTextFieldtxt2=newJTextField("TextField",50);fra.setBounds(0,0,300,200);fra.setLayout(null);txt1.setBounds(50,50,130,20);//設(shè)置文本框的大小txt2.setBounds(50,100,130,30);fra.add(txt1);fra.add(txt2);fra.setVisible(true);
}}6.3布局管理器
一個(gè)容器中的各個(gè)組件之間的位置和大小關(guān)系就稱(chēng)之為布局。Java語(yǔ)言提供了布局管理器來(lái)管理組件在容器中的布局。
布局管理器會(huì)依據(jù)組件的加入順序決定其擺放方式。組件的大小、形狀、位置,在不同的布局管理器下有顯著的不同。此外,布局管理器會(huì)自動(dòng)適應(yīng)小程序或應(yīng)用程序窗口的大小,如果某個(gè)窗口的大小改變了,那么其上各個(gè)組件的大小、形狀、位置都有可能發(fā)生改變。選擇了容器之后,可以通過(guò)容器的setLayout()和getLayout()方法來(lái)確定布局(Layout)。
Java提供以下幾種布局管理器(LayoutManager):流布局(FlowLayout)、邊界布局(BorderLayout)、網(wǎng)格布局(GridLayout)、卡片布局(CardLayout)等。
為每個(gè)容器都可以設(shè)置對(duì)應(yīng)的布局方式。沒(méi)有設(shè)置時(shí),為缺省的布局方式。Panel、Applet的默認(rèn)布局為流布局,Window、Frame的默認(rèn)布局為邊界布局。6.3布局管理器
流式布局(FlowLayout)
流式布局按從左至右、從上至下的方式將組件加入到容器中。如果一行顯示不了所有的組件,會(huì)自動(dòng)換到下一行顯示。對(duì)齊方式默認(rèn)為:CENTER;間距默認(rèn)為:5(像素)設(shè)置容器布局為流布局的方法如下:c.setLayout(FlowLayoutlayout):將容器組件的布局設(shè)為流布局。例如創(chuàng)建一個(gè)框架,若指定框架布局為流布局,則可用以下兩種方式。方式一:JFramef=newJFrame();FlowLayoutfLayout=newFlowLayout();f.setLayout(fLayout);方式二:JFramef=newJFrame();f.setLayout(newFlowLayout());流式布局(FlowLayout)importjava.awt.*;importjavax.swing.*;publicclassBorderLayoutDemo{ publicstaticvoidmain(Stringarg[])
{ JButtonb1=newJButton("Button1");
JButtonb2=newJButton("Button2"); JButtonb3=newJButton("Button3"); JButtonb4=newJButton("Button4"); JButtonb5=newJButton("Button5"); JFramewin=newJFrame("FlowStyle");
win.setLayout(newFlowLayout());//設(shè)置框架為流布局
win.add(b1); win.add(b2); win.add(b3); win.add(b4); win.add(b5); win.setSize(200,160); win.setVisible(true); win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}邊界布局(BorderLayout)
邊界布局將容器組件劃分成了5個(gè)區(qū)域:南(South)、北(North)、東(East)、西(West)、中(Center)。設(shè)置容器的布局為邊界布局的方法如下:c.setLayout(BorderLayoutlayout):將容器組件的布局設(shè)為流布局。若指定了容器的布局為邊界布局,則向容器中加入組件,可以通過(guò)以下兩種形式實(shí)現(xiàn):①add(Strings,Componentcomp):其中s代表位置,位置用字符串“South”、“North”、“East”、“West”、“Center”(默認(rèn))表示。②add(Componentcomp,intx):其中x是代表位置的常量值,分別是BorderLayout.SOUTH、BorderLayout.NORTH、BorderLayout.EAST、BorderLayout.WEST、BorderLayout.CENTER。邊界布局(BorderLayout)importjava.awt.*;importjavax.swing.*;classBorderLayoutDemo{ publicstaticvoidmain(Stringarg[])
{ JButtonnorth=newJButton("North");
JButtoneast=newJButton("East"); JButtonwest=newJButton("west"); JButtonsouth=newJButton("South"); JButtoncenter=newJButton("Center"); JFramewin=newJFrame("BorderStyle");
win.setLayout(newBorderLayout());//設(shè)置框架為邊界布局
win.add("North",north); win.add("South",south); win.add("Center",center); win.add("East",east);win.add("West",west);win.setSize(200,200);win.setVisible(true);win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}
網(wǎng)格布局將容器劃分成規(guī)則的行列網(wǎng)格樣式,組件逐行加入到網(wǎng)格中,每個(gè)組件大小一致。但當(dāng)容器中放置的組件數(shù)超過(guò)網(wǎng)格數(shù)時(shí),則自動(dòng)增加網(wǎng)格列數(shù),行數(shù)不變。在向GridLayout添加組件時(shí),其順序是從網(wǎng)格的左上角開(kāi)始,從左向右排列,直到排滿(mǎn)一行,再?gòu)南乱恍虚_(kāi)始從左向右依次排列。網(wǎng)格布局(GridLayout)importjava.awt.*;importjavax.swing.*;classGridLayoutDemo{ publicstaticvoidmain(Stringarg[]){JButtonb1=newJButton("Button1");
JButtonb2=newJButton("Button2");JButtonb3=newJButton("Button3");JButtonb4=newJButton("Button4");JButtonb5=newJButton("Button5");JButtonb6=newJButton("Button6");JFramewin=newJFrame("GridStyle");
win.setLayout(newGridLayout(2,3));//設(shè)置框架為網(wǎng)絡(luò)布局
win.add(b1);win.add(b2);win.add(b3);win.add(b4);win.add(b5);win.add(b6);win.setSize(260,160);win.setVisible(true);win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }}卡片式布局(CardLayout)
CardLayout布局好像是將各個(gè)組件作為卡片排放到一個(gè)“卡片盒”中,只有最上面的卡片可見(jiàn)??梢酝ㄟ^(guò)這種布局的方法將卡片中的任何一張移到最上面。通常每張卡片都是一個(gè)容器(如面板)。JTabbedPane創(chuàng)建的對(duì)象稱(chēng)作選項(xiàng)卡窗格。選項(xiàng)卡窗格的默認(rèn)布局是CardLayout卡片式布局。選項(xiàng)卡窗格可以使用:add(Stringtext,Componentc);將組件c添加到容器當(dāng)中,并指定和該組件c對(duì)應(yīng)的選項(xiàng)卡的文本是text。使用構(gòu)造方法:publicJTabbedPane(intplace)創(chuàng)建的選項(xiàng)卡窗格的選項(xiàng)卡的位置由參數(shù)place指定,其值為JTabbedPane.TOP、JTabbedPane.BOTTOM、JTabbedPane.LEFT、JTabbedPane.RIGHT??ㄆ讲季郑–ardLayout)importjava.awt.*;importjavax.swing.*;publicclassCardLayoutDemo{ publicstaticvoidmain(Stringarg[])
{ JFramewin=newJFrame("CardStyle");
JTabbedPanep=newJTabbedPane(JTabbedPane.LEFT);//創(chuàng)建選項(xiàng)卡窗格
for(inti=1;i<=3;i++)
{
p.add("觀看第"+i+"個(gè)按鈕",newJButton("按鈕"+i)); }
win.add(p);//將選項(xiàng)卡窗格加入到框架中
win.setSize(260,160); win.setVisible(true); win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}習(xí)題16.4事件處理機(jī)制
在一個(gè)GUI程序中,為了能夠接收用戶(hù)的輸入、鍵盤(pán)命令和鼠標(biāo)操作,程序應(yīng)該能夠識(shí)別這些操作并做出相應(yīng)的響應(yīng)。通常,一個(gè)鍵盤(pán)操作或一個(gè)鼠標(biāo)操作將引發(fā)一個(gè)系統(tǒng)預(yù)先定義好的事件,在程序中需要編寫(xiě)事件的處理程序。事件處理機(jī)制事件處理的過(guò)程中的幾個(gè)基本概念:(1)Event(事件)。所謂事件,就是用戶(hù)使用鼠標(biāo)或鍵盤(pán)對(duì)窗口
中的組件進(jìn)行交互發(fā)生的一個(gè)操作。例如,單擊按鈕、輸入文
字、單擊鼠標(biāo)或鍵盤(pán)等。(2)EventSource(事件源)。所謂事件源,就是能夠產(chǎn)生事件的
對(duì)象。如按鈕、鼠標(biāo)、文本框或鍵盤(pán)等。(3)EventHandler(事件監(jiān)聽(tīng)者或處理者)。接收由事件源所產(chǎn)生
的事件消息的對(duì)象,它通常是一個(gè)接口或適配器。(4)事件處理程序。對(duì)接收到的事件(消息)進(jìn)行處理的程序代
碼,通常是一個(gè)方法,它包含在事件監(jiān)聽(tīng)器中,方法的結(jié)構(gòu)
是由系統(tǒng)預(yù)先定義好的。為事件源注冊(cè)監(jiān)聽(tīng)器,事件源產(chǎn)生事件后,事件處理系統(tǒng)便會(huì)自動(dòng)產(chǎn)生一個(gè)與操作對(duì)應(yīng)的事件類(lèi)的對(duì)象(實(shí)例),監(jiān)聽(tīng)器(接口或適配器)監(jiān)聽(tīng)到事件并將該事件交給相應(yīng)的事件處理程序,由事件處理程序完成對(duì)事件的處理。如當(dāng)用戶(hù)單擊鼠標(biāo)時(shí),事件處理系統(tǒng)便會(huì)產(chǎn)生一個(gè)代表此事件的ActionEvent事件類(lèi)的對(duì)象。用戶(hù)進(jìn)行的操作不同,所產(chǎn)生的事件類(lèi)對(duì)象也會(huì)不同。每一類(lèi)事件對(duì)應(yīng)一個(gè)監(jiān)聽(tīng)器接口,該接口規(guī)定了接收并處理該類(lèi)事件的方法規(guī)范。事件處理機(jī)制工作過(guò)程引入事件處理機(jī)制后的編程基本方法如下:①組件的事件處理類(lèi)所在的包為:importjava.awt.event.*或
importjavax.swing.event.*②用如下語(yǔ)句設(shè)置事件監(jiān)聽(tīng)者:事件源.addXxxListener(事件監(jiān)聽(tīng)者)---實(shí)現(xiàn)了XxxListener接口的類(lèi)的實(shí)例③事件監(jiān)聽(tīng)者所對(duì)應(yīng)的類(lèi)實(shí)現(xiàn)事件所對(duì)應(yīng)的接口XxxListener,并重
寫(xiě)接口中的全部方法。④要?jiǎng)h除事件監(jiān)聽(tīng)者,可以使用語(yǔ)句:
事件源.removeXxxLitener()編寫(xiě)事件處理程序的方法事件觸發(fā)及處理過(guò)程示意圖Java常用事件事件類(lèi)/接口名稱(chēng)接口方法與說(shuō)明ActionEvent動(dòng)作事件類(lèi)ActionListener接口actionPerformed(ActionEvente)單擊按鈕、選擇菜單項(xiàng)或在文本行中按回車(chē)鍵時(shí)ComponentEvent調(diào)整事件類(lèi)ComponentListener接口componentMoved(ComponentEvente)組件移動(dòng)時(shí)componentHidden(ComponentEvente)組件隱藏時(shí)componentResized(ComponentEvente)組件縮放時(shí)componentShown(ComponentEvente)組件顯示時(shí)FocusEvent焦點(diǎn)事件類(lèi)FocusListener接口focusGained(FocusEvente) 組件獲得焦點(diǎn)時(shí)focusLost(FocusEvente) 組件失去焦點(diǎn)時(shí)ItemEvent選擇事件類(lèi)ItemListener接口itemStateChanged(ItemEvente)選擇復(fù)選框、單選按鈕、單擊列表框、選中帶復(fù)選框菜單時(shí)WindowEvent窗口事件類(lèi)WindowListener接口windowOpened(WindowEvente) 窗口打開(kāi)后windowClosed(WindowEvente) 窗口關(guān)閉后windowClosing(WindowEvente) 窗口關(guān)閉時(shí)windowActivated(WindowEvente) 窗口激活時(shí)windowDeactivated(WindowEvente) 窗口失去焦點(diǎn)時(shí)windowIconified(WindowEvente) 窗口最小化時(shí)windowDeiconified(WindowEvente) 最小化窗口還原時(shí)AdjustmentEvent調(diào)整事件類(lèi)AdjustmentListener接口adjustmentValueChanged(AdjustmentEvente)改變滾動(dòng)條滑塊位置Java常用事件
每個(gè)事件類(lèi)都提供方法:publicObjectgetSource(),當(dāng)多個(gè)事件源觸發(fā)的事件由一個(gè)共同的監(jiān)聽(tīng)器處理時(shí),通過(guò)該方法可判斷當(dāng)前的事件源是哪個(gè)組件。Java常用事件事件適配器
為進(jìn)行事件處理,需要實(shí)現(xiàn)Listener接口的類(lèi),而Java規(guī)定在實(shí)現(xiàn)該接口的類(lèi)中,必須實(shí)現(xiàn)接口中所聲明的全部方法。在具體程序設(shè)計(jì)過(guò)程中,有可能只用到接口中的一個(gè)或幾個(gè)方法。
Java為那些聲明了多個(gè)方法的Listener接口提供了一個(gè)對(duì)應(yīng)的適配器(Adapter)類(lèi),在該類(lèi)中實(shí)現(xiàn)了對(duì)應(yīng)接口的所有方法,只是方法體為空。
因此在創(chuàng)建新類(lèi)時(shí),可以不實(shí)現(xiàn)接口,而只繼承某個(gè)適當(dāng)?shù)倪m配器,并且僅覆蓋所關(guān)心的事件處理方法。事件適配器接口名稱(chēng)適配器名稱(chēng)接口名稱(chēng)適配器名稱(chēng)ComponentListenerComponentAdapterMouseListenerMouseAdapterFocusListenerFocusAdapterMouseMotionListenerMouseMotionAdapterItemListenerItemAdapterWindowListenerWindowAdapterKeyListenerKeyAdapter接口與對(duì)應(yīng)的適配器類(lèi)利用KeyAdapter類(lèi)處理TextEven事件可供選擇的可視組件(1)復(fù)選框(JCheckBox)復(fù)選框提供兩種狀態(tài),一種是選中,另一種是未選中,用戶(hù)通過(guò)單擊該組件切換狀態(tài)。復(fù)選框的常用方法①publicJCheckBox():創(chuàng)建一個(gè)沒(méi)有名字的復(fù)選框。②publicJCheckBox(Stringtext):創(chuàng)建一個(gè)名字是text的復(fù)選框。③publicbooleanisSelected():如果復(fù)選框處于選中狀態(tài)該方法返回true,否則返回false。(2)單選按鈕(JRadioButton)單選按鈕和復(fù)選框很類(lèi)似,所不同的是:在若干個(gè)復(fù)選框中我們可以同時(shí)選中多個(gè),而一組單選按鈕同一時(shí)刻只能有一個(gè)被選中。單選按鈕的常用方法如下:①JRadioButton(Stringtext):創(chuàng)建一個(gè)名字是text的單選按鈕。②JRadioButton(Stringtext,booleanselected):創(chuàng)建一個(gè)名字是text的單選按鈕,同時(shí)指定了單選按鈕的選中狀態(tài)。③publicbooleanisSelected():如果單選按鈕處于選中狀態(tài)該方法返回true,否則返回false。
例可供選擇的可視組件(3)組合框(JComboBox)①publicJComboBox():使用該構(gòu)造方法創(chuàng)建一個(gè)沒(méi)有選項(xiàng)下拉列表。②publicJComboBox(Object[]items):創(chuàng)建包含指定數(shù)組中的元素的JComboBox。默認(rèn)情況下,選擇數(shù)組中的第一項(xiàng)。③publicvoidaddItem(ObjectanObject):下拉列表調(diào)用該方法增加選項(xiàng)。④publicintgetSelectedIndex():下拉列表調(diào)用該方法可以返回當(dāng)前下拉列表中被選中的選項(xiàng)的索引,索引的起始值是0。⑤publicObjectgetSelectedItem():下拉列表調(diào)用該方法可以返回當(dāng)前下拉列表中被選中的選項(xiàng)。⑥publicvoidremoveItemAt(intanIndex):下拉列表調(diào)用該方法可以從下拉列表的選項(xiàng)中刪除索引值是anIndex選項(xiàng)。例可供選擇的可視組件(4)列表框(JList)列表框的作用和組合框的作用基本相同,但它允許用戶(hù)同時(shí)選擇多項(xiàng)。列表框與組合框的方法大致相同,但須注意以下方法的使用:①publicObjectgetSelectedValue():返回所選的第一個(gè)值,如果選擇為空,則返回null。②publicObject[]getSelectedValues():返回所選單元的一組值。返回值以遞增的索引順序存儲(chǔ)。③publicint[]getSelectedIndexes():獲取選項(xiàng)框中選中的多項(xiàng)位置索引編號(hào)。返回值是整型數(shù)組。
例可供選擇的可視組件對(duì)話(huà)框
對(duì)話(huà)框(Dialog)是一個(gè)帶有標(biāo)題欄的無(wú)邊界窗口,通常用于接受用戶(hù)的信息或向用戶(hù)顯示信息。對(duì)話(huà)框用Dialog類(lèi)創(chuàng)建,而Dialog類(lèi)是從Window類(lèi)繼承的。對(duì)話(huà)框的默認(rèn)布局是BorderLayout。
通常定義一個(gè)框架作為對(duì)話(huà)框的所屬框架。importjava.awt.*;importjavax.swing.*;importjava.awt.event.*;publicclassDialogDemoextendsJFrameimplementsActionListener{ publicDialogDemo(){ super("對(duì)話(huà)框示例");JButtonb=newJButton("打開(kāi)對(duì)話(huà)框"); add(b); b.addActionListener(this); setSize(200,120);
setVisible(t
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年山東商務(wù)職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)附答案詳解
- 2026年汝州職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能考試題庫(kù)含答案詳解
- 2026年四川工商職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)含答案詳解
- 2026年廣東科貿(mào)職業(yè)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)及答案詳解一套
- 2026年蘇州工業(yè)園區(qū)服務(wù)外包職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性考試題庫(kù)及參考答案詳解1套
- 四川省成都市蓉城名校聯(lián)盟2024-2025學(xué)年高二上學(xué)期期中考試英語(yǔ)考試英語(yǔ)參考答案及評(píng)分標(biāo)準(zhǔn)
- 開(kāi)魯事業(yè)編面試題及答案
- 機(jī)構(gòu)研究報(bào)告-中國(guó)短劇出海商業(yè)生態(tài)分析報(bào)告-培訓(xùn)課件
- 西藏自治區(qū)財(cái)政廳2026年度引進(jìn)急需緊缺人才15人備考題庫(kù)完整參考答案詳解
- 環(huán)境安全生產(chǎn)責(zé)任制度
- 晉中學(xué)院高等數(shù)學(xué)試卷
- 2025年低碳杯試題及答案
- 胰島素注射說(shuō)課課件
- 小兒流感護(hù)理業(yè)務(wù)查房
- 肉雞養(yǎng)殖場(chǎng)規(guī)章管理制度
- 2025年離婚抖音作品離婚協(xié)議書(shū)
- 2024年吉林省永吉縣移動(dòng)公司公開(kāi)招聘工作人員試題帶答案詳解
- 企業(yè)年金政策培訓(xùn)課件
- 慢阻肺病例分享
- 小說(shuō)的文學(xué)常識(shí)課件
- 物流設(shè)施運(yùn)行與維護(hù)專(zhuān)業(yè)教學(xué)標(biāo)準(zhǔn)(中等職業(yè)教育)2025修訂
評(píng)論
0/150
提交評(píng)論