通信軟件開發(fā)基礎(chǔ)Java語言5-Event_第1頁
通信軟件開發(fā)基礎(chǔ)Java語言5-Event_第2頁
通信軟件開發(fā)基礎(chǔ)Java語言5-Event_第3頁
通信軟件開發(fā)基礎(chǔ)Java語言5-Event_第4頁
通信軟件開發(fā)基礎(chǔ)Java語言5-Event_第5頁
已閱讀5頁,還剩72頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

5.1事件處理模型5.2按鈕事件的處理5.3鼠標事件的處理5.4窗口事件的處理5.5鍵盤事件的處理5.6其他事件處理5.7事件處理實例(討論) 第五章事件處理事件(Event):

一個對象的狀態(tài)變化被稱為事件,即事件描述源狀態(tài)的變化。事件產(chǎn)生在用戶交互的圖形界面。例如,點擊一個按鈕,移動鼠標,通過鍵盤輸入一個字符,從列表中選擇一個項目,均是一個事件。用戶對于輸入設(shè)備的操作都是事件。

封裝了程序和用戶進行交互的信息,和平臺無關(guān)的類。第五章事件處理事件處理機制圖事件包:

java.awt.event(javax.swing.event)第五章事件處理事件處理三要素

事件源發(fā)生事件的對象(組件),如按鈕、窗口等。事件類型Java中所有的事件都封裝成一個類,這些事件類被定義在java.awt.event包和javax.swing.event包中,所有的事件類均繼承了AWTEvent類,所有的事件類均繼承了一個方法——getSouce()方法,該方法返回發(fā)生事件的對象。

事件監(jiān)聽器

不同的事件類型發(fā)生后,由事件監(jiān)聽器接收事件并調(diào)用相應(yīng)的事件處理方法。所有的事件監(jiān)聽器實際上都是一個java.awt.event包中的接口,繼承了java.util.EventListener接口。不同事件類型的監(jiān)聽器具有不同的方法。

第五章事件處理

基于代理的事件處理模型,JDK1.1以后引入的事件處理模型。在產(chǎn)生事件的對象(組件)上,注冊一個或多個稱為監(jiān)聽器(監(jiān)聽者)的類,這些類包含事件處理器,用來接收和處理這個事件。

監(jiān)聽器就是實現(xiàn)了Listener接口的類。事件是只向注冊的監(jiān)聽器報告的對象。每個事件都有一個對應(yīng)的監(jiān)聽器接口,規(guī)定哪些方法必須在適合接收對應(yīng)事件的類中定義。實現(xiàn)了定義那些方法的接口的類可以注冊為一個監(jiān)聽器。第五章事件處理5.1事件處理模型事件對象(類型)事件監(jiān)聽器事件源事件處理模型示意圖第五章事件處理例5-1:ButtonEventExamples1.javaResultis:第五章事件處理5.1事件處理模型import

java.awt.*;importjavax.swing.*;import

java.awt.event.*;

class

ButtonHandler

implements

ActionListener

{

publicvoid

actionPerformed(

ActionEvente

)

{

System.out.println("ButtonareClickedonce!");

}}第五章事件處理5.1事件處理模型例5-1:ButtonEventExamples1.java

public

class

ButtonEventExamples1{publicstaticvoidmain(String[]arg){

//implementactionPerformedmethod

JFramem_mainF=newJFrame("EventTest");

Containerm_cPane=m_mainF.getContentPane(

);

ButtonHandler

bh1=

newButtonHandler(

);

JButton

m_btn=newJButton("Here");

m_btn.addActionListener(bh1);

m_cPane.add(m_btn,"South");第五章事件處理5.1事件處理模型例5-1(續(xù)):ButtonEventExamples1.javaJPanelp1=newJPanel();p1.setSize(150,150);m_cPane.add(p1,"Center");m_mainF.setSize(250,200);m_mainF.setVisible(true);}//endofmainmethod}//endofButtonEventExamples1class注:按鈕對象m_btn為事件源(被監(jiān)聽者),

實現(xiàn)Listener接口的對象bh1為事件監(jiān)聽器。第五章事件處理5.1事件處理模型例5-1(續(xù)):ButtonEventExamples1.java第五章事件處理5.1事件處理模型事件處理一般步驟:引入java.awt.event包

格式:

importjava.awt.event;給事件源對象注冊事件監(jiān)聽器格式:事件源對象.addXXXListener(XXXListener);如果事件源對象所在的主類已經(jīng)實現(xiàn)了相應(yīng)的事件監(jiān)聽器接口,即classcustomClassNameimplementsXXXListener則事件源對象.addXXXListener()的參數(shù)為this,否則需新建一個XXXListener類或其繼承類的對象。

實現(xiàn)XXXListener接口中的方法點擊按鈕所發(fā)生的事件為動作事件。

動作事件對應(yīng)的事件類是ActionEvent類。ActionEvent常用方法ObjectgetSource()

TheobjectonwhichtheEventinitiallyoccurred.StringgetActionCommand()

RgeModifiers()Returnsthemodifierkeyshelddownduringthisactionevent.StringparamString()Returnsaparameterstringidentifyingthisactionevent.第五章事件處理5.2按鈕事件的處理動作事件對應(yīng)的事件監(jiān)聽器為:

ActionListenerActionListener監(jiān)聽器接口中只有一個抽象的方法actionPerformed(ActionEvente)

按鈕事件處理的步驟:引入java.awt.event包。注冊動作事件監(jiān)聽者addActionListener(ActionListener)。實現(xiàn)ActionListener接口的方法,

即actionPerformed(ActionEvente)。第五章事件處理5.2按鈕事件的處理importjava.awt.*;importjavax.swing.*;importjava.awt.event.*;classButtonEventExamples2extendsJFrame{

Containerm_cPane; JButtonm_bNorth,m_bSouth,m_bEast,m_bWest; JLabelm_labeltxt;ButtonEventExamples2(){ super("ActionListenerDemo"); m_cPane=this.getContentPane();第五章事件處理5.2按鈕事件的處理例5-2:ButtonEventExamples2_test.java

m_cPane.setBackground(Color.red); m_labeltxt=newJLabel("IamaLabel.");

m_cPane.add(m_labeltxt,"Center");

m_bNorth=newJButton("bei");

m_bNorth.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){

processAction(e);}});

m_cPane.add("North",m_bNorth);第五章事件處理5.2按鈕事件的處理例5-2(續(xù)):ButtonEventExamples2_test.java

m_bSouth=newJButton("nan");

m_bSouth.addActionListener(newActionListener(){

public

voidactionPerformed(ActionEvente){

processAction(e);}});

m_cPane.add("South",m_bSouth);

m_bEast=newJButton("dong");

m_bEast.addActionListener(newActionListener(){

public

voidactionPerformed(ActionEvente){

processAction(e);}});

m_cPane.add("East",m_bEast);第五章事件處理5.2按鈕事件的處理例5-2(續(xù)):ButtonEventExamples2_test.java

m_bWest=newJButton("xi");

m_bWest.addActionListener(newActionListener(){

public

voidactionPerformed(ActionEvente){

processAction(e);}});

m_cPane.add("West",m_bWest);

this.setSize(300,250);

this.setVisible(true);}//endofButtonEventExamples2()第五章事件處理5.2按鈕事件的處理例5-2(續(xù)):ButtonEventExamples2_test.javapublicvoidprocessAction(ActionEvente){

Objectobj=e.getSource();

//geteventsourceif(obj==m_bNorth)//handlebaseondifferenteventsource m_labeltxt.setText("NorthButtonClicked!"); if(obj==m_bSouth)//handlebaseondifferenteventsource m_labeltxt.setText("SouthButtonClicked!"); if(obj==m_bEast)//handlebaseondifferenteventsource m_labeltxt.setText("EastButtonClicked!"); if(obj==m_bWest)//handlebaseondifferenteventsource

m_labeltxt.setText("WestButtonClicked!");}}//endofButtonEventExamples2class第五章事件處理5.2按鈕事件的處理例5-2(續(xù)):ButtonEventExamples2_test.javapublicclassButtonEventExamples2_test{publicstaticvoidmain(Stringargs[]){ButtonEventExamples2nowFrame=newButtonEventExamples2();nowFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}第五章事件處理5.2按鈕事件的處理例5-2(續(xù)):ButtonEventExamples2_test.java第五章事件處理5.2按鈕事件的處理例5-2(續(xù)):ButtonEventExamples2_test.javaResultis:第五章事件處理5.2按鈕事件的處理作業(yè)1:jisuantixingForManWoMan_test.java程序結(jié)果如下圖所示:第五章事件處理5.2按鈕事件的處理總結(jié):實現(xiàn)ActionListener的三種方式

實現(xiàn)一個ActionListener子類,再把按鈕的事件處理委托給這個子類處理。例5-1即是這種方式。(不常用)用匿名類實現(xiàn)ActionListener接口,再把事件處理委托給這個匿名類的實例。主流的Swing事件處理。例5-2即是這種方式。(最常用)讓界面(容器)類實現(xiàn)ActionListener接口,再把事件處理委托給界面類。這種方式適合于處理一些短小簡單或要求內(nèi)聚的事件處理。第五章事件處理5.2按鈕事件的處理總結(jié):實現(xiàn)ActionListener的三種方式

方式三示意代碼:publicclassMyFrameextendsJFrameimplementsActionListener{

publicMyFrame(){

....//Createothercomponentsandaddthemintoacontainer

m_btn2.addActionListener(this);

}

/*按鈕的事件處理如下

*/

publicvoidactionPerformed(ActionEvente){

if(e.getSource()==m_btn2)

{showMsg("按下了"+m_btn2.getText());……

}

}}產(chǎn)生鼠標事件的事件源通常是一個容器或組件。當鼠標進入、離開容器,或在容器中單擊鼠標、拖動鼠標等操作時,都發(fā)生鼠標事件。鼠標事件對應(yīng)的事件類是MouseEvent類。第五章事件處理5.3鼠標事件的處理MouseEvent的常用方法方法功能getX()獲取鼠標的X坐標getY()獲取鼠標的Y坐標getPoint()獲取鼠標的位置getClickout()獲取鼠標單擊次數(shù)getModifiers()獲取鼠標的左或右鍵isPopupTrigger()返回鼠標事件是否為彈出菜單的觸發(fā)器第五章事件處理5.3鼠標事件的處理鼠標事件對應(yīng)的事件監(jiān)聽器有兩個:鼠標事件MouseListener(orMouseAdapter)鼠標移動事件MouseMontionListener(orMouseMontionAdapter)鼠標滾輪事件MouseWheelListenerMouseMontionListener接口的方法:方法功能MouseMoved(MouseEvente)鼠標移動時的處理方法MouseDraged(MouseEvente)鼠標拖動時的處理方法第五章事件處理5.3鼠標事件的處理MouseListener接口的方法方法功能MousePressed(MouseEvente)鼠標按下時的處理方法MouseReleased(MouseEvente)鼠標釋放時的處理方法MouseClicked(MouseEvente)鼠標點擊時的處理方法MouseEntered(MouseEvente)鼠標進入時的處理方法MouseExited(MouseEvente)鼠標離開時的處理方法第五章事件處理5.3鼠標事件的處理

MouseWheelListener接口只有一個方法(滾輪滾動時處理方法)

publicvoid

MouseWheelMoved(MouseWheelEvente)MouseWheelEvent類常用方法publicPointgetPoint()

Returnsthex,ypositionoftheeventrelativetothesourcecomponent.getX()/getY()Returnsthehorizontalx/ypositionoftheeventrelativetothesourcecomponent.publicintgetWheelRotation()

Returnsthenumberof"clicks"themousewheelwasrotated.positivevaluesifthemousewheelwasrotateddown/towardstheuser.第五章事件處理5.3鼠標事件的處理鼠標事件的處理步驟:注冊MouseListener監(jiān)聽器。事件源對象.addMouseListener();當事件源所在的類已經(jīng)實現(xiàn)MouseListener接口時,參數(shù)可用this,否則需創(chuàng)建或繼承一個MouseListener類的對象。實現(xiàn)MouseListener接口的所有方法,即MousePressed(MouseEvente)、MouseReleased(MouseEvente)、MouseEntered(MouseEvente)、MouseExited(MouseEvente)、MouseClicked(MouseEvente)。

第五章事件處理5.3鼠標事件的處理鼠標移動事件的處理步驟:注冊MouseMotionListener監(jiān)聽器。事件源對象.addMouseMotionListener();當事件源所在的類已經(jīng)實現(xiàn)MouseMotionListener接口時,參數(shù)可用this,否則需創(chuàng)建或繼承一個MouseMotionListener類的對象。實現(xiàn)MouseMotionListener接口的所有方法,即

MouseMoved(MouseEvente)MouseDraged(MouseEvente)第五章事件處理5.3鼠標事件的處理importjava.awt.*;importjava.awt.event.MouseEvent;importjava.awt.event.MouseListener;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.JScrollPane;importjavax.swing.JTextArea;classMouseHandleExamples1

extendsJFrame

implementsMouseListener{ Containerm_cPane; JTextAream_txtA;第五章事件處理5.3鼠標事件的處理例5-3:mouseEvent_MouseListener_examples1.java JPanelm_panelA; JScrollPanem_spane;publicMouseHandleExamples1(){ super("MouseListenerexample1:"); m_cPane=this.getContentPane(); m_txtA=newJTextArea(); m_spane=newJScrollPane(m_txtA); m_txtA.setBounds(5,5,300,200); m_cPane.add(m_spane);

m_txtA.addMouseListener(this);第五章事件處理5.3鼠標事件的處理例5-3(續(xù)):mouseEvent_MouseListener_examples1.java this.setSize(360,280); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}//endofMouseHandleExamples1()

publicvoidmouseClicked(MouseEvente){//mouseclickevent intmouseKeyValue=e.getButton();//getmouseeventsource StringmouseInfo=null; if(mouseKeyValue==MouseEvent.BUTTON1

) //ItisMouseKeyleftbutton? mouseInfo="MouseleftKey";else

if(mouseKeyValue==MouseEvent.BUTTON3)第五章事件處理5.3鼠標事件的處理例5-3(續(xù)):mouseEvent_MouseListener_examples1.java //ItisMouseKeyrightbutton? mouseInfo="MouserightKey";else //ItisMouseKeymiddlebutton mouseInfo="MousemiddleKey";//endofif

m_txtA.append("Mouseclick."+mouseInfo+".\n");} //endofmouseClickedmethod

publicvoidmouseEntered(MouseEvente)//whenmouseentercontainer{

m_txtA.append("mouseentercontainer.\n");}第五章事件處理5.3鼠標事件的處理例5-3(續(xù)):mouseEvent_MouseListener_examples1.javapublicvoidmouseExited(MouseEvente)//whenmouseexitcontainer{m_txtA.append("mouseexitcontainer.\n");}

publicvoidmousePressed(MouseEvente)//whenmousepressed{}

publicvoidmouseReleased(MouseEvente)//whenmousereleased{}}//endofMouseHandleExamples1classpublicclassmouseEvent_MouseListener_examples1{ publicstaticvoidmain(String[]args){ newMouseHandleExamples1();}}第五章事件處理5.3鼠標事件的處理例5-3(續(xù)):mouseEvent_MouseListener_examples1.java第五章事件處理5.3鼠標事件的處理例5-3(續(xù)):mouseEvent_MouseListener_examples1.javaResultis:與例5-3mouseEvent_MouseListener_examples1.java區(qū)別:第五章事件處理5.3鼠標事件的處理例5-4:mouseEvent_MouseListener_examples2.java……

publicvoidmouseExited(MouseEvente)//whenmouseexitcontainer{m_txtA.append("mouseexitcontainer.\n");}

publicvoidmousePressed(MouseEvente)//whenmousepressed{m_txtA.append("mousepressed.\n");}publicvoidmouseReleased(MouseEvente)//whenmousereleased{m_txtA.append("mousereleased.\n");}}//endofMouseHandleExamples2class……Resultis…?第五章事件處理5.3鼠標事件的處理例5-5:mouseEvent_TwoListener_examples.javaimportjava.awt.*;importjava.awt.event.MouseEvent;importjava.awt.event.MouseListener;importjava.awt.event.MouseMotionListener;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.JScrollPane;importjavax.swing.JTextArea;classMouseHandleExamples3implementsMouseMotionListener,

MouseListener{ 第五章事件處理5.3鼠標事件的處理例5-5:mouseEvent_TwoListener_examples.java JFramem_FrameA; Containerm_cPane; JTextAream_txtA; JPanelm_panelA; JScrollPanem_spane;

public

MouseHandleExamples3(){

m_FrameA=newJFrame("MouseListener+MouseMotionListenerexample:"); m_cPane=m_FrameA.getContentPane();第五章事件處理5.3鼠標事件的處理例5-5:mouseEvent_TwoListener_examples.java

m_txtA=newJTextArea(); m_spane=newJScrollPane(m_txtA); m_txtA.setBounds(5,5,300,200); m_cPane.add(m_spane);

m_txtA.addMouseListener(this);

m_txtA.addMouseMotionListener(this); m_FrameA.setSize(360,280); m_FrameA.setVisible(true);m_FrameA.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}//endofMouseHandleExamples3()第五章事件處理5.3鼠標事件的處理例5-5:mouseEvent_TwoListener_examples.java //TheseareMouseMotionListenermethods

publicvoidmouseDragged(MouseEvente){

Strings="Mousedragging:X="+e.getX()+"Y="+e.getY()+"\n"; m_txtA.append(s);

}

publicvoidmouseMoved(MouseEvente){}第五章事件處理5.3鼠標事件的處理例5-5:mouseEvent_TwoListener_examples.java //TheseareMouseListenermethods

publicvoidmouseClicked(MouseEvente){Strings="Mouseclicking:(X="+e.getX()+",Y="+e.getY()+")\n";m_txtA.append(s);

}publicvoidmouseEntered(MouseEvente){ m_txtA.append("mouseentercontainer.\n");

}

publicvoidmouseExited(MouseEvente){ m_txtA.append("mouseexitcontainer.\n");

}第五章事件處理5.3鼠標事件的處理例5-5:mouseEvent_TwoListener_examples.java

publicvoidmousePressed(MouseEvente){

}publicvoidmouseReleased(MouseEvente){

}}//endofMouseHandleExamples3classpublicclassmouseEvent_TwoListener_examples1{publicstaticvoidmain(Stringargs[]){ newMouseHandleExamples3();

}}窗口的事件監(jiān)聽器是WindowListener或WindowAdapter。WindowListenerwindowOpened(WindowEvente)windowClosed(WindowEvente)windowClosing(WindowEvente)WindowIconfied(WindowEvente)WindowDeiconfied(WindowEvente)WindowActivated(WindowEvente)WindowDeactivated(WindowEvente)第五章事件處理5.4窗口事件的處理在有焦點的組件上操作鍵盤時,發(fā)生鍵盤事件(KeyEvent)。KeyEvent類的常用方法

方法功能getKeyCode()獲得按下或釋放的鍵代碼getKeyText()獲得按下或釋放的鍵的字符串setKeyCode()設(shè)置按下或釋放的鍵代碼setKeyText()設(shè)置按下或釋放的鍵字符串getKeyChar()獲得按下或釋放的鍵的字符setKeyChar()設(shè)置按下或釋放的鍵的字符第五章事件處理5.5鍵盤事件的處理鍵盤事件的事件監(jiān)聽器是:KeyListener或KeyAdapter。

KeyListener類的方法方法功能KeyPressed(KeyEvente)按下鍵盤時的處理方法KeyReleased(KeyEvente)釋放鍵盤時的處理方法KeyTyped(MouseEvente)按下表示有效的Unicode鍵盤字符(非系統(tǒng)鍵)時的處理方法第五章事件處理5.5鍵盤事件的處理鍵盤事件的處理過程:注冊KeyListener監(jiān)聽器。事件源對象.addKeyListener();當事件源所在的類已經(jīng)實現(xiàn)KeyListener接口時,參數(shù)可用this,否則需創(chuàng)建或繼承一個KeyListener的對象。實現(xiàn)KeyListener接口的所有方法,即

KeyPressed(KeyEvente)

KeyReleased(KeyEvente)

KeyTyped(MouseEvente)

第五章事件處理5.5鍵盤事件的處理第五章事件處理5.5鍵盤事件的處理例5-6:KeyEvent_examples1.javaimportjava.awt.*;importjava.awt.event.*;importjavax.swing.*;classKeyHandleExamples1extendsJFrameimplementsKeyListener{

Containerm_cPane; JTextAream_txtA; JPanelm_panelA; JScrollPanem_spane; JLabelm_labelA,m_labelB; intxpos,ypos;publicKeyHandleExamples1(){ super("KeyEventexample:"); m_cPane=this.getContentPane(); m_labelA=newJLabel("釣魚島是中國的!"); m_labelB=newJLabel("永遠不屬于..!"); xpos=150;ypos=150; this.setLayout(null);

this.addKeyListener(this); m_labelA.setBounds(140,10,160,24); m_labelB.setBounds(140,30,160,24);第五章事件處理5.5鍵盤事件的處理例5-6(續(xù)):KeyEvent_examples1.java第五章事件處理5.5鍵盤事件的處理例5-6(續(xù)):KeyEvent_examples1.java m_cPane.add(m_labelA); m_cPane.add(m_labelB); this.setSize(400,400); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

//endofKeyHandleExamples1()publicvoidpaint(Graphicsg){ super.paint(g); g.setColor(Color.red); g.fillOval(xpos,ypos,120,120);}//TheseareKeyListenermethods

publicvoidkeyPressed(KeyEvente){intnKeycode=e.getKeyCode(); if(nKeycode==KeyEvent.VK_LEFT) xpos=xpos-10; if(nKeycode==KeyEvent.VK_RIGHT) xpos=xpos+10; if(nKeycode==KeyEvent.VK_UP) ypos=ypos-10; if(nKeycode==KeyEvent.VK_DOWN) ypos=ypos+10;

repaint();}第五章事件處理5.5鍵盤事件的處理例5-6(續(xù)):KeyEvent_examples1.java

publicvoidkeyReleased(KeyEvente){}

publicvoidkeyTyped(KeyEvente){}}//endofKeyHandleExamples1classpublicclassKeyEvent_examples1{ publicstaticvoidmain(String[]args){ newKeyHandleExamples1();

}}第五章事件處理5.5鍵盤事件的處理例5-6(續(xù)):KeyEvent_examples1.java第五章事件處理5.6其他事件處理JMenuItem的事件處理,類似JButton的事件處理。即實現(xiàn)ActionListener接口。關(guān)鍵代碼:MenuItemMenuItem1;……MenuItem1=newMenuItem("new");MenuItem1.addActionListener(this);menu1.add(MenuItem1);……A.菜單事件處理

第五章事件處理5.6其他事件處理A.菜單事件處理

關(guān)鍵代碼(續(xù)):……

publicvoidactionPerformed(ActionEvente){if(e.getSource()==MenuItem1){……}……

實現(xiàn)ItemListener接口。關(guān)鍵步驟:1)聲明主類時實現(xiàn)ItemListener接口

classclassNameimplementsItemListener2)注冊監(jiān)聽者事件源對象.addItemListener();3)實現(xiàn)ItemListener接口中的itemStateChanged(ItemEvente)方法

Stringname=(String)e.getItem();第五章事件處理5.6其他事件處理B.選項事件處理(JCheckBoxJRadioButton)

實現(xiàn)AjdustmentListener接口。關(guān)鍵步驟:1)聲明主類時實現(xiàn)AjdustmentListener接口classclassNameimplementsAjdustmentListener2)注冊動作按鈕監(jiān)聽者事件源對象.addAjdustmentListener(this);3)實現(xiàn)AjdustmentListener接口的adjustmentStateChanged(AdjustmentEvente)方法第五章事件處理5.6其他事件處理C.滾動條事件處理(JScrollbar)實現(xiàn)ActionListener/

ItemListener接口。第五章事件處理5.6其他事件處理D.下拉列表事件處理(JComboBox)

實現(xiàn)ActionListener接口。E.編輯框事件處理(JTextFieldJPasswordField)

CategoryInterfaceNameMethodsActionActionListeneractionPerformed(ActionEvent)

ItemItemListener

itemStateChanged(ItemEvent)

MousemotionMouseMotionListenermouseDragged(MouseEvent)mouseMoved(MouseEvent)Mousebutton

MouseListenermousePressed(MouseEvent)mouseReleased(MouseEvent)mouseEntered(MouseEvent)mouseExited(MouseEvent)mouseClicked(MouseEvent)Key

KeyListenerkeyPressed(KeyEvent)keyReleased(KeyEvent)keyTyped(KeyEvent)表5-1AWT事件、方法類型和接口的關(guān)系CategoryInterfaceNameMethods

FocusFocusListenerfocusGained(FocusEvent)

focusLost(FocusEvent)

AdjustmentAdjustmentListeneradjustmentValueChanged(AdjustmentEvent)ComponentComponentListenercomponentMoved(ComponentEvent)

componentHidden(ComponentEvent)componentResized(ComponentEvent)componentShown(ComponentEvent)Container

ContainerListenercomponentAdded(containerEvent)componentRemoved(containerEvent)表5-1AWT事件、方法類型和接口的關(guān)系CategoryInterfaceNameMethods

WindowwindowListenerwindowClosing(WindowEvent)

windowOpened(WindowEvent)windowIconified(WindowEvent)windowDeiconified(WindowEvent)windowClosed(WindowEvent)windowActivated(WindowEvent)windowDeactivated(WindowEvent)TextTextListenertextValueChanged(TextEvent)表5-1AWT事件、方法類型和接口的關(guān)系

注冊監(jiān)聽器,必須實現(xiàn)XXXListener接口的所有方法!有時實際不需要使用XXXListener接口的所有方法。為了方便起見,Java語言提供了Adapter類。

程序可以繼承Adapters類,只需重寫所需要的方法。每個XXXListener接口一般都有對應(yīng)的XXXAdapter。

(有些XXXListener沒有,例如ActionListener)。例如:WindowListenerWindowAdapter第五章事件處理5.7事件適配器(Adapters)importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;classFrameMenuPaint_examples1extendsJPanel{ JMenumenu1,menu2,menu3,menu4; JMenuItemmenuItem11,menuItem12,menuItem13; JMenuItemmenuItem21,menuItem22,menuItem23; JMenuItemmenuItem31,menuItem32; JMenuItemmenuItem41,menuItem42;第五章事件處理5.8實例(討論)

例5-7:FrameMenuPaint_test1.java

intradius_var,pattern_var; Colorcolor_var; Graphicsgraphics_var; finalintWIDTH=600; finalintHEIGHT=600;publicvoidinit(){ radius_var=0; pattern_var=2; color_var=Color.white;

}第五章事件處理5.8實例(討論)

例5-7(續(xù)):FrameMenuPaint_test1.javapublicJMenuBarCreatMenu(){ JMenuBarmb=newJMenuBar(); menu1=newJMenu("Color"); menuItem11=newJMenuItem("green"); menuItem12=newJMenuItem("red"); menuItem13=newJMenuItem("blue"); menuItem11.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){

processAction(e);}

});第五章事件處理5.8實例(討論)

例5-7(續(xù)):FrameMenuPaint_test1.java menuItem12.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){

processAction(e);}

}); menuItem13.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){

processAction(e);}

});

menu1.add(menuItem11); menu1.add(menuItem12); menu1.add(menuItem13);

mb.add(menu1);第五章事件處理5.8實例(討論)

例5-7(續(xù)):FrameMenuPaint_test1.java menu2=newJMenu("radius"); menuItem21=newJMenuItem("50"); menuItem22=newJMenuItem("100"); menuItem23=newJMenuItem("150");

menuItem21.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){

processAction(e);}

});第五章事件處理5.8實例(討論)

例5-7(續(xù)):FrameMenuPaint_test1.java menuItem22.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){

processAction(e); }

}); menuItem23.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){

processAction(e);}

});

menu2.add(menuItem21);menu2.add(menuItem22); menu2.add(menuItem23);

mb.add(menu2);第五章事件處理5.8實例(討論)

例5-7(續(xù)):FrameMenuPaint_test1.java menu3=newJMenu("pattern"); menuItem31=newJMenuItem("fill"); menuItem32=newJMenuItem("frame"); menuItem31.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){

processAction(e);}

}); menuItem32.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){

processAction(e);}

}); menu3.add(menuItem31);menu3.add(menuItem32);

mb.add(menu3);第五章事件處理5.8實例(討論)

例5-7(續(xù)):FrameMenuPaint_test1.java menu4=newJMenu("control"); menuItem41=newJMenuItem("clear"); menuItem42=newJMenuItem("exit"); menuItem41.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){

processAction(e);}

}); menuItem42.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){

processAction(e);}

});第五章事件處理5.8實例(討論)

例5-7(續(xù)):FrameMen

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論