




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
5.1事件處理模型5.2按鈕事件的處理5.3鼠標(biāo)事件的處理5.4窗口事件的處理5.5鍵盤(pán)事件的處理5.6其他事件處理5.7事件處理實(shí)例(討論) 第五章事件處理事件(Event):
一個(gè)對(duì)象的狀態(tài)變化被稱為事件,即事件描述源狀態(tài)的變化。事件產(chǎn)生在用戶交互的圖形界面。例如,點(diǎn)擊一個(gè)按鈕,移動(dòng)鼠標(biāo),通過(guò)鍵盤(pán)輸入一個(gè)字符,從列表中選擇一個(gè)項(xiàng)目,均是一個(gè)事件。用戶對(duì)于輸入設(shè)備的操作都是事件。
封裝了程序和用戶進(jìn)行交互的信息,和平臺(tái)無(wú)關(guān)的類(lèi)。第五章事件處理事件處理機(jī)制圖事件包:
java.awt.event(javax.swing.event)第五章事件處理事件處理三要素
事件源發(fā)生事件的對(duì)象(組件),如按鈕、窗口等。事件類(lèi)型Java中所有的事件都封裝成一個(gè)類(lèi),這些事件類(lèi)被定義在java.awt.event包和javax.swing.event包中,所有的事件類(lèi)均繼承了AWTEvent類(lèi),所有的事件類(lèi)均繼承了一個(gè)方法——getSouce()方法,該方法返回發(fā)生事件的對(duì)象。
事件監(jiān)聽(tīng)器
不同的事件類(lèi)型發(fā)生后,由事件監(jiān)聽(tīng)器接收事件并調(diào)用相應(yīng)的事件處理方法。所有的事件監(jiān)聽(tīng)器實(shí)際上都是一個(gè)java.awt.event包中的接口,繼承了java.util.EventListener接口。不同事件類(lèi)型的監(jiān)聽(tīng)器具有不同的方法。
第五章事件處理
基于代理的事件處理模型,JDK1.1以后引入的事件處理模型。在產(chǎn)生事件的對(duì)象(組件)上,注冊(cè)一個(gè)或多個(gè)稱為監(jiān)聽(tīng)器(監(jiān)聽(tīng)者)的類(lèi),這些類(lèi)包含事件處理器,用來(lái)接收和處理這個(gè)事件。
監(jiān)聽(tīng)器就是實(shí)現(xiàn)了Listener接口的類(lèi)。事件是只向注冊(cè)的監(jiān)聽(tīng)器報(bào)告的對(duì)象。每個(gè)事件都有一個(gè)對(duì)應(yīng)的監(jiān)聽(tīng)器接口,規(guī)定哪些方法必須在適合接收對(duì)應(yīng)事件的類(lèi)中定義。實(shí)現(xiàn)了定義那些方法的接口的類(lèi)可以注冊(cè)為一個(gè)監(jiān)聽(tīng)器。第五章事件處理5.1事件處理模型事件對(duì)象(類(lèi)型)事件監(jiān)聽(tīng)器事件源事件處理模型示意圖第五章事件處理例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注:按鈕對(duì)象m_btn為事件源(被監(jiān)聽(tīng)者),
實(shí)現(xiàn)Listener接口的對(duì)象bh1為事件監(jiān)聽(tīng)器。第五章事件處理5.1事件處理模型例5-1(續(xù)):ButtonEventExamples1.java第五章事件處理5.1事件處理模型事件處理一般步驟:引入java.awt.event包
格式:
importjava.awt.event;給事件源對(duì)象注冊(cè)事件監(jiān)聽(tīng)器格式:事件源對(duì)象.addXXXListener(XXXListener);如果事件源對(duì)象所在的主類(lèi)已經(jīng)實(shí)現(xiàn)了相應(yīng)的事件監(jiān)聽(tīng)器接口,即classcustomClassNameimplementsXXXListener則事件源對(duì)象.addXXXListener()的參數(shù)為this,否則需新建一個(gè)XXXListener類(lèi)或其繼承類(lèi)的對(duì)象。
實(shí)現(xiàn)XXXListener接口中的方法點(diǎn)擊按鈕所發(fā)生的事件為動(dòng)作事件。
動(dòng)作事件對(duì)應(yīng)的事件類(lèi)是ActionEvent類(lèi)。ActionEvent常用方法ObjectgetSource()
TheobjectonwhichtheEventinitiallyoccurred.StringgetActionCommand()
RgeModifiers()Returnsthemodifierkeyshelddownduringthisactionevent.StringparamString()Returnsaparameterstringidentifyingthisactionevent.第五章事件處理5.2按鈕事件的處理動(dòng)作事件對(duì)應(yīng)的事件監(jiān)聽(tīng)器為:
ActionListenerActionListener監(jiān)聽(tīng)器接口中只有一個(gè)抽象的方法actionPerformed(ActionEvente)
按鈕事件處理的步驟:引入java.awt.event包。注冊(cè)動(dòng)作事件監(jiān)聽(tīng)者addActionListener(ActionListener)。實(shí)現(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é):實(shí)現(xiàn)ActionListener的三種方式
實(shí)現(xiàn)一個(gè)ActionListener子類(lèi),再把按鈕的事件處理委托給這個(gè)子類(lèi)處理。例5-1即是這種方式。(不常用)用匿名類(lèi)實(shí)現(xiàn)ActionListener接口,再把事件處理委托給這個(gè)匿名類(lèi)的實(shí)例。主流的Swing事件處理。例5-2即是這種方式。(最常用)讓界面(容器)類(lèi)實(shí)現(xiàn)ActionListener接口,再把事件處理委托給界面類(lèi)。這種方式適合于處理一些短小簡(jiǎn)單或要求內(nèi)聚的事件處理。第五章事件處理5.2按鈕事件的處理總結(jié):實(shí)現(xiàn)ActionListener的三種方式
方式三示意代碼:publicclassMyFrameextendsJFrameimplementsActionListener{
publicMyFrame(){
....//Createothercomponentsandaddthemintoacontainer
m_btn2.addActionListener(this);
}
/*按鈕的事件處理如下
*/
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==m_btn2)
{showMsg("按下了"+m_btn2.getText());……
}
}}產(chǎn)生鼠標(biāo)事件的事件源通常是一個(gè)容器或組件。當(dāng)鼠標(biāo)進(jìn)入、離開(kāi)容器,或在容器中單擊鼠標(biāo)、拖動(dòng)鼠標(biāo)等操作時(shí),都發(fā)生鼠標(biāo)事件。鼠標(biāo)事件對(duì)應(yīng)的事件類(lèi)是MouseEvent類(lèi)。第五章事件處理5.3鼠標(biāo)事件的處理MouseEvent的常用方法方法功能getX()獲取鼠標(biāo)的X坐標(biāo)getY()獲取鼠標(biāo)的Y坐標(biāo)getPoint()獲取鼠標(biāo)的位置getClickout()獲取鼠標(biāo)單擊次數(shù)getModifiers()獲取鼠標(biāo)的左或右鍵isPopupTrigger()返回鼠標(biāo)事件是否為彈出菜單的觸發(fā)器第五章事件處理5.3鼠標(biāo)事件的處理鼠標(biāo)事件對(duì)應(yīng)的事件監(jiān)聽(tīng)器有兩個(gè):鼠標(biāo)事件MouseListener(orMouseAdapter)鼠標(biāo)移動(dòng)事件MouseMontionListener(orMouseMontionAdapter)鼠標(biāo)滾輪事件MouseWheelListenerMouseMontionListener接口的方法:方法功能MouseMoved(MouseEvente)鼠標(biāo)移動(dòng)時(shí)的處理方法MouseDraged(MouseEvente)鼠標(biāo)拖動(dòng)時(shí)的處理方法第五章事件處理5.3鼠標(biāo)事件的處理MouseListener接口的方法方法功能MousePressed(MouseEvente)鼠標(biāo)按下時(shí)的處理方法MouseReleased(MouseEvente)鼠標(biāo)釋放時(shí)的處理方法MouseClicked(MouseEvente)鼠標(biāo)點(diǎn)擊時(shí)的處理方法MouseEntered(MouseEvente)鼠標(biāo)進(jìn)入時(shí)的處理方法MouseExited(MouseEvente)鼠標(biāo)離開(kāi)時(shí)的處理方法第五章事件處理5.3鼠標(biāo)事件的處理
MouseWheelListener接口只有一個(gè)方法(滾輪滾動(dòng)時(shí)處理方法)
publicvoid
MouseWheelMoved(MouseWheelEvente)MouseWheelEvent類(lèi)常用方法publicPointgetPoint()
Returnsthex,ypositionoftheeventrelativetothesourcecomponent.getX()/getY()Returnsthehorizontalx/ypositionoftheeventrelativetothesourcecomponent.publicintgetWheelRotation()
Returnsthenumberof"clicks"themousewheelwasrotated.positivevaluesifthemousewheelwasrotateddown/towardstheuser.第五章事件處理5.3鼠標(biāo)事件的處理鼠標(biāo)事件的處理步驟:注冊(cè)MouseListener監(jiān)聽(tīng)器。事件源對(duì)象.addMouseListener();當(dāng)事件源所在的類(lèi)已經(jīng)實(shí)現(xiàn)MouseListener接口時(shí),參數(shù)可用this,否則需創(chuàng)建或繼承一個(gè)MouseListener類(lèi)的對(duì)象。實(shí)現(xiàn)MouseListener接口的所有方法,即MousePressed(MouseEvente)、MouseReleased(MouseEvente)、MouseEntered(MouseEvente)、MouseExited(MouseEvente)、MouseClicked(MouseEvente)。
第五章事件處理5.3鼠標(biāo)事件的處理鼠標(biāo)移動(dòng)事件的處理步驟:注冊(cè)MouseMotionListener監(jiān)聽(tīng)器。事件源對(duì)象.addMouseMotionListener();當(dāng)事件源所在的類(lèi)已經(jīng)實(shí)現(xiàn)MouseMotionListener接口時(shí),參數(shù)可用this,否則需創(chuàng)建或繼承一個(gè)MouseMotionListener類(lèi)的對(duì)象。實(shí)現(xiàn)MouseMotionListener接口的所有方法,即
MouseMoved(MouseEvente)MouseDraged(MouseEvente)第五章事件處理5.3鼠標(biāo)事件的處理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鼠標(biāo)事件的處理例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鼠標(biāo)事件的處理例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鼠標(biāo)事件的處理例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鼠標(biāo)事件的處理例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鼠標(biāo)事件的處理例5-3(續(xù)):mouseEvent_MouseListener_examples1.java第五章事件處理5.3鼠標(biāo)事件的處理例5-3(續(xù)):mouseEvent_MouseListener_examples1.javaResultis:與例5-3mouseEvent_MouseListener_examples1.java區(qū)別:第五章事件處理5.3鼠標(biāo)事件的處理例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鼠標(biāo)事件的處理例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鼠標(biāo)事件的處理例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鼠標(biāo)事件的處理例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鼠標(biāo)事件的處理例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鼠標(biāo)事件的處理例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鼠標(biāo)事件的處理例5-5:mouseEvent_TwoListener_examples.java
publicvoidmousePressed(MouseEvente){
}publicvoidmouseReleased(MouseEvente){
}}//endofMouseHandleExamples3classpublicclassmouseEvent_TwoListener_examples1{publicstaticvoidmain(Stringargs[]){ newMouseHandleExamples3();
}}窗口的事件監(jiān)聽(tīng)器是WindowListener或WindowAdapter。WindowListenerwindowOpened(WindowEvente)windowClosed(WindowEvente)windowClosing(WindowEvente)WindowIconfied(WindowEvente)WindowDeiconfied(WindowEvente)WindowActivated(WindowEvente)WindowDeactivated(WindowEvente)第五章事件處理5.4窗口事件的處理在有焦點(diǎn)的組件上操作鍵盤(pán)時(shí),發(fā)生鍵盤(pán)事件(KeyEvent)。KeyEvent類(lèi)的常用方法
方法功能getKeyCode()獲得按下或釋放的鍵代碼getKeyText()獲得按下或釋放的鍵的字符串setKeyCode()設(shè)置按下或釋放的鍵代碼setKeyText()設(shè)置按下或釋放的鍵字符串getKeyChar()獲得按下或釋放的鍵的字符setKeyChar()設(shè)置按下或釋放的鍵的字符第五章事件處理5.5鍵盤(pán)事件的處理鍵盤(pán)事件的事件監(jiān)聽(tīng)器是:KeyListener或KeyAdapter。
KeyListener類(lèi)的方法方法功能KeyPressed(KeyEvente)按下鍵盤(pán)時(shí)的處理方法KeyReleased(KeyEvente)釋放鍵盤(pán)時(shí)的處理方法KeyTyped(MouseEvente)按下表示有效的Unicode鍵盤(pán)字符(非系統(tǒng)鍵)時(shí)的處理方法第五章事件處理5.5鍵盤(pán)事件的處理鍵盤(pán)事件的處理過(guò)程:注冊(cè)KeyListener監(jiān)聽(tīng)器。事件源對(duì)象.addKeyListener();當(dāng)事件源所在的類(lèi)已經(jīng)實(shí)現(xiàn)KeyListener接口時(shí),參數(shù)可用this,否則需創(chuàng)建或繼承一個(gè)KeyListener的對(duì)象。實(shí)現(xiàn)KeyListener接口的所有方法,即
KeyPressed(KeyEvente)
KeyReleased(KeyEvente)
KeyTyped(MouseEvente)
第五章事件處理5.5鍵盤(pán)事件的處理第五章事件處理5.5鍵盤(pán)事件的處理例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("釣魚(yú)島是中國(guó)的!"); m_labelB=newJLabel("永遠(yuǎn)不屬于..!"); 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鍵盤(pán)事件的處理例5-6(續(xù)):KeyEvent_examples1.java第五章事件處理5.5鍵盤(pán)事件的處理例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鍵盤(pán)事件的處理例5-6(續(xù)):KeyEvent_examples1.java
publicvoidkeyReleased(KeyEvente){}
publicvoidkeyTyped(KeyEvente){}}//endofKeyHandleExamples1classpublicclassKeyEvent_examples1{ publicstaticvoidmain(String[]args){ newKeyHandleExamples1();
}}第五章事件處理5.5鍵盤(pán)事件的處理例5-6(續(xù)):KeyEvent_examples1.java第五章事件處理5.6其他事件處理JMenuItem的事件處理,類(lèi)似JButton的事件處理。即實(shí)現(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){……}……
實(shí)現(xiàn)ItemListener接口。關(guān)鍵步驟:1)聲明主類(lèi)時(shí)實(shí)現(xiàn)ItemListener接口
classclassNameimplementsItemListener2)注冊(cè)監(jiān)聽(tīng)者事件源對(duì)象.addItemListener();3)實(shí)現(xiàn)ItemListener接口中的itemStateChanged(ItemEvente)方法
Stringname=(String)e.getItem();第五章事件處理5.6其他事件處理B.選項(xiàng)事件處理(JCheckBoxJRadioButton)
實(shí)現(xiàn)AjdustmentListener接口。關(guān)鍵步驟:1)聲明主類(lèi)時(shí)實(shí)現(xiàn)AjdustmentListener接口classclassNameimplementsAjdustmentListener2)注冊(cè)動(dòng)作按鈕監(jiān)聽(tīng)者事件源對(duì)象.addAjdustmentListener(this);3)實(shí)現(xiàn)AjdustmentListener接口的adjustmentStateChanged(AdjustmentEvente)方法第五章事件處理5.6其他事件處理C.滾動(dòng)條事件處理(JScrollbar)實(shí)現(xiàn)ActionListener/
ItemListener接口。第五章事件處理5.6其他事件處理D.下拉列表事件處理(JComboBox)
實(shí)現(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事件、方法類(lèi)型和接口的關(guān)系CategoryInterfaceNameMethods
FocusFocusListenerfocusGained(FocusEvent)
focusLost(FocusEvent)
AdjustmentAdjustmentListeneradjustmentValueChanged(AdjustmentEvent)ComponentComponentListenercomponentMoved(ComponentEvent)
componentHidden(ComponentEvent)componentResized(ComponentEvent)componentShown(ComponentEvent)Container
ContainerListenercomponentAdded(containerEvent)componentRemoved(containerEvent)表5-1AWT事件、方法類(lèi)型和接口的關(guān)系CategoryInterfaceNameMethods
WindowwindowListenerwindowClosing(WindowEvent)
windowOpened(WindowEvent)windowIconified(WindowEvent)windowDeiconified(WindowEvent)windowClosed(WindowEvent)windowActivated(WindowEvent)windowDeactivated(WindowEvent)TextTextListenertextValueChanged(TextEvent)表5-1AWT事件、方法類(lèi)型和接口的關(guān)系
注冊(cè)監(jiān)聽(tīng)器,必須實(shí)現(xiàn)XXXListener接口的所有方法!有時(shí)實(shí)際不需要使用XXXListener接口的所有方法。為了方便起見(jiàn),Java語(yǔ)言提供了Adapter類(lèi)。
程序可以繼承Adapters類(lèi),只需重寫(xiě)所需要的方法。每個(gè)XXXListener接口一般都有對(duì)應(yīng)的XXXAdapter。
(有些XXXListener沒(méi)有,例如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實(shí)例(討論)
例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實(shí)例(討論)
例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實(shí)例(討論)
例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實(shí)例(討論)
例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實(shí)例(討論)
例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實(shí)例(討論)
例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實(shí)例(討論)
例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實(shí)例(討論)
例5-7(續(xù)):FrameMen
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 賓館視頻調(diào)閱管理制度
- 商管公司證照管理制度
- 醫(yī)療廢水排放管理制度
- 公司應(yīng)急資金管理制度
- 社交媒體對(duì)歷史文化傳播的影響分析-洞察闡釋
- 滄州職業(yè)技術(shù)學(xué)院《蛋白質(zhì)組學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 分布式計(jì)算框架中的故障檢測(cè)與自愈機(jī)制-洞察闡釋
- 亳州學(xué)院《微電影創(chuàng)作》2023-2024學(xué)年第二學(xué)期期末試卷
- 畢節(jié)工業(yè)職業(yè)技術(shù)學(xué)院《自然科學(xué)發(fā)展概論》2023-2024學(xué)年第二學(xué)期期末試卷
- 跨文化運(yùn)動(dòng)比較-洞察闡釋
- 破壁靈芝孢子粉產(chǎn)品介紹課件
- 海洋生物活性成分的提取、分離與結(jié)構(gòu)分析
- 應(yīng)急管理概論-理論與實(shí)踐電子教案完整版
- 案場(chǎng)考試題庫(kù)
- 醫(yī)藥代表培訓(xùn)醫(yī)院微觀市場(chǎng)管理教學(xué)課件
- 火力發(fā)電企業(yè)作業(yè)活動(dòng)風(fēng)險(xiǎn)分級(jí)管控清單(參考)
- 如何構(gòu)建印刷企業(yè)的安全文化
- 肺痿肺癰咳嗽上氣病脈證治第七
- EN779-2012一般通風(fēng)過(guò)濾器——過(guò)濾性能測(cè)定(中文版)
- 雙橫臂獨(dú)立懸架設(shè)計(jì)
- 綜采工作面停產(chǎn)及恢復(fù)生產(chǎn)安全技術(shù)措施
評(píng)論
0/150
提交評(píng)論