第三部分應用程序設計圖形界面事件處理_第1頁
第三部分應用程序設計圖形界面事件處理_第2頁
第三部分應用程序設計圖形界面事件處理_第3頁
第三部分應用程序設計圖形界面事件處理_第4頁
第三部分應用程序設計圖形界面事件處理_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

JAVA應用開發(fā)詳解第18章:圖形界面

——事件處理MLDN軟件教學研發(fā)部本章目標了解事件的概念了解事件的監(jiān)聽及處理了解常用事件掌握適配器設計模式在事件監(jiān)聽中的應用事件和監(jiān)聽器每當一個按鈕按下時,實際上按鈕的狀態(tài)就發(fā)生了改變,那么此時就會產生一個事件,而如果要想處理此事件,則就需要事件的監(jiān)聽者不斷的監(jiān)聽事件的變化,并根據這些事件進行相應的處理。在Swing編程中,依然使用了最早AWT的事件處理方式,所有的事件類(基本上任意的一個組件都有對應的事件)都是EventObject類的子類EventObject類public

classEventObjectextendsObject

implementsSerializable{

publicEventObject(Objectsource){ //構造一個發(fā)生事件的對象

}

publicObjectgetSource(){ //返回一個事件對象

}

publicStringtoString(){ //得到信息

}}Java事件處理流程窗體事件WindowListener是專門處理窗體的事件監(jiān)聽接口,一個窗體的所有變化,例如:窗口打開、關閉等都可以使用這個接口進行監(jiān)聽。No.方法類型描述1voidwindowActivated(WindowEvente)普通將窗口變?yōu)榛顒哟翱跁r觸發(fā)2voidwindowDeactivated(WindowEvente)普通將窗口變?yōu)椴换顒哟翱跁r觸發(fā)3voidwindowClosed(WindowEvente)普通當窗口被關閉時觸發(fā)4voidwindowClosing(WindowEvente)普通當窗口正在關閉時觸發(fā)5voidwindowIconified(WindowEvente)普通窗口最小化時觸發(fā)6voidwindowDeiconified(WindowEvente)普通窗口從最小化恢復到正常狀態(tài)時觸發(fā)7voidwindowOpened(WindowEvente)普通窗口打開時觸發(fā)實現WindowListenerpublic

classMyWindowEventHandleimplementsWindowListener{//實現窗口監(jiān)聽

public

voidwindowActivated(WindowEventarg0){ //設置為活動窗口時觸發(fā)

System.out.println("windowActivated-->窗口被選中。"); }

public

voidwindowClosed(WindowEventarg0){ //窗口被關閉窗口時觸發(fā)

System.out.println("windowClosed-->窗口被關閉。"); }

public

voidwindowClosing(WindowEventarg0){ //窗口關閉時觸發(fā),按下關閉按鈕

System.out.println("windowClosing-->窗口關閉。"); System.exit(1); //系統(tǒng)退出

}

public

voidwindowDeactivated(WindowEventarg0){ //設置為非活動窗口時觸發(fā)

System.out.println("windowDeactivated-->取消窗口選中。"); }

public

voidwindowDeiconified(WindowEventarg0){ //窗口從最小化還原時觸發(fā)

System.out.println("windowDeiconified-->窗口從最小化恢復。"); }

public

voidwindowIconified(WindowEventarg0){ //窗口最小化時觸發(fā)

System.out.println("windowIconified-->窗口最小化。"); }

public

voidwindowOpened(WindowEventarg0){ //窗口打開時觸發(fā)

System.out.println("windowOpened-->窗口被打開。"); }}在窗體上注冊事件監(jiān)聽器packageorg.lxh.demo18.windoweventdemo;importjava.awt.Color;importjavax.swing.JFrame;public

classMyWindowEventJFrame01{

public

static

voidmain(String[]args){ JFrameframe=newJFrame("WelcomeToMLDN"); //實例化窗體對象

//將此窗體加入一個窗口事件監(jiān)聽器之中,這樣監(jiān)聽器就可以根據事件進行處理

frame.addWindowListener(newMyWindowEventHandle()); frame.setSize(300,160); //設置組件大小

frame.setBackground(Color.WHITE); //設置窗體的背景顏色

frame.setLocation(300,200); //設置窗體的顯示位置

frame.setVisible(true); //讓組件顯示

}}監(jiān)聽適配器在整個事件處理中提供了很多的Adapter(適配器)類,方便用戶進行事件處理的實現,以WindowAdapter為例,用戶只要繼承了此類,就可以根據自己的需要覆寫方法,如果現在只需要關心窗口關閉方法,則只在子類中覆寫windowClosing()方法即可。通過WindowAdapter實現監(jiān)聽packageorg.lxh.demo18.windoweventdemo;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;public

classMyWindowAdapterEventHandle

extendsWindowAdapter{ //實現適配器類

//此時,可以根據自己的需要覆寫方法,此類只覆寫windowClosing()方法

public

voidwindowClosing(WindowEventarg0){ //窗口關閉時觸發(fā),按下關閉按鈕

System.out.println("windowClosing-->窗口關閉。"); System.exit(1); //系統(tǒng)退出

}}使用匿名內部類packageorg.lxh.demo18.windoweventdemo;importjava.awt.Color;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;importjavax.swing.JFrame;public

classMyWindowEventJFrame03{

public

static

voidmain(String[]args){ JFrameframe=newJFrame("WelcomeToMLDN"); //實例化窗體對象

//此時直接使用WindowAdapter的子類完成監(jiān)聽的處理

frame.addWindowListener(newWindowAdapter(){ //覆寫窗口關閉的方法

public

voidwindowClosing(WindowEventarg0){ System.exit(1); //系統(tǒng)退出

} }); frame.setSize(300,160); //設置組件大小

frame.setBackground(Color.WHITE); //設置窗體的背景顏色

frame.setLocation(300,200); //設置窗體的顯示位置

frame.setVisible(true); //讓組件顯示

}}動作事件及監(jiān)聽處理一個按鈕要想讓其變得有意義,就必須使用事件處理,在Swing的事件處理中,可以使用ActionListener接口處理按鈕的動作事件,ActionListener接口只定義了一個方法。No.方法類型描述1voidactionPerformed(ActionEvente)普通發(fā)生操作時調用使用ActionListener監(jiān)聽classActionHandle{

privateJFrameframe=newJFrame("WelcomeToMLDN"); //聲明一個窗體對象

privateJButtonbut=newJButton("顯示"); //聲明一個按鈕

privateJLabellab=newJLabel(); //聲明一個標簽

privateJTextFieldtext=newJTextField(10); //定義一個文本域

privateJPanelpan=newJPanel(); //定義一個面板

publicActionHandle(){ Fontfnt=newFont("Serief",Font.ITALIC+Font.BOLD,28);

lab.setFont(fnt); //設置標簽的顯示字體

lab.setText("等待用戶輸入信息!"); //設置默認顯示文字

but.addActionListener(newActionListener(){ //采用匿名內部類

public

voidactionPerformed(ActionEventarg0){

if(arg0.getSource()==but){//判斷觸發(fā)源是否是按鈕

lab.setText(text.getText()); //將文本文字設置到標簽

} } }); //此處加入動作監(jiān)聽

frame.addWindowListener(newWindowAdapter(){ //加入窗口監(jiān)聽,覆寫窗口關閉的方法

public

voidwindowClosing(WindowEventarg0){ System.exit(1); //系統(tǒng)退出

} });

。。。

}}改進登陸程序如果用戶輸入的用戶名為:“l(fā)ixinghua”,密碼為“mldn”,則認為是合法用戶,提示登陸成功的信息,反之則提示登陸失敗的信息,操作代碼如下所示。鍵盤事件及監(jiān)聽處理在Swing的事件處理中也可以對鍵盤的操作進行監(jiān)聽,直接使用KeyListener接口即可。此接口定義了如下的方法。如果要想取得鍵盤鍵入的內容,則可以通過KeyEvent取得,此類的常用方法如下所示。No.方法類型描述1voidkeyTyped(KeyEvente)普通鍵入某個鍵時調用2voidkeyPressed(KeyEvente)普通鍵盤按下時調用3voidkeyReleased(KeyEvente)普通鍵盤松開時調用No.方法類型描述1publicchargetKeyChar()普通返回鍵入的字符,只針對于keyTyped有意義2publicintgetKeyCode()普通返回鍵入字符的鍵碼3publicstaticStringgetKeyText(intkeyCode)普通返回此鍵的信息,如:“HOME”、“F1”或“A”等實現鍵盤監(jiān)聽classMyKeyHandleextendsJFrameimplementsKeyListener{

privateJTextAreatext=newJTextArea();

publicMyKeyHandle(){

super.setTitle("WelcomeToMLDN"); JScrollPanescr=newJScrollPane(text); //加入滾動條

scr.setBounds(5,5,300,200);

super.add(scr); //在窗體加入組件

text.addKeyListener(this); //加入key監(jiān)聽

super.setSize(310,210); //設置窗體大小

super.setVisible(true); //顯示窗體

super.addWindowListener(newWindowAdapter(){ //加入事件監(jiān)聽,覆寫窗口關閉方法

public

voidwindowClosing(WindowEventarg0){ System.exit(1); //系統(tǒng)退出

} }); }

public

voidkeyPressed(KeyEvente){ //鍵盤按下

text.append("鍵盤“"+KeyEvent.getKeyText(e.getKeyCode())+"”鍵按下\n"); }

public

voidkeyReleased(KeyEvente){ //鍵盤松開

text.append("鍵盤“"+KeyEvent.getKeyText(e.getKeyCode())+"”鍵松開\n"); }

public

voidkeyTyped(KeyEvente){ //鍵入內容

text.append("輸入的內容是:"+e.getKeyChar()+"\n"); }}使用KeyAdapteclassMyKeyHandleextendsJFrame{ //此類定義時直接繼承了JFrame類

privateJTextAreatext=newJTextArea();

publicMyKeyHandle(){

super.setTitle("WelcomeToMLDN"); JScrollPanescr=newJScrollPane(text); //加入滾動條

scr.setBounds(5,5,300,200);

super.add(scr); //在窗體加入組件

text.addKeyListener(newKeyAdapter(){

public

voidkeyTyped(KeyEvente){ //鍵入內容

text.append("輸入的內容是:"+e.getKeyChar()+"\n"); } }); //加入key監(jiān)聽

super.setSize(310,210); //設置窗體大小

super.setVisible(true); //顯示窗體

super.addWindowListener(newWindowAdapter(){//加入事件監(jiān)聽

//覆寫窗口關閉方法

public

voidwindowClosing(WindowEventarg0){ System.exit(1); //系統(tǒng)退出

} }); }}鼠標事件及監(jiān)聽處理如果想對一個鼠標的操作進行監(jiān)聽,例如,鼠標按下、松開等,則可以實現MouseListener接口No.方法類型描述1voidmouseClicked(MouseEvente)普通鼠標單擊時調用(按下并釋放)2voidmousePressed(MouseEvente)普通鼠標按下時調用3voidmouseReleased(MouseEvente)普通鼠標松開時調用4voidmouseEntered(MouseEvente)普通鼠標進入到組件時調用5voidmouseExited(MouseEvente)普通鼠標離開組件時調用MouseEvent在每個事件觸發(fā)后都會產生MouseEvent事件,此事件可以得到鼠標的相關操作No.方法及常量類型描述1publicstaticfinalintBUTTON1常量表示鼠標左鍵的常量2publicstaticfinalintBUTTON2常量表示鼠標滾軸的常量3publicstaticfinalintBUTTON3常量表示鼠標右鍵的常量4publicintgetButton()普通以數字形式返回按下的鼠標鍵5publicintgetClickCount()普通返回鼠標的單擊次數6publicstaticStringgetMouseModifiersText(intmodifiers)普通以字符串形式返回鼠標按下的鍵信息7publicintgetX()普通返回鼠標操作的X坐標8publicintgetY()普通返回鼠標操作的Y坐標實現鼠標監(jiān)聽classMyMouseHandleextendsJFrameimplementsMouseListener{

privateJTextAreatext=newJTextArea();

publicMyMouseHandle(){

...

//在窗體加入組件

text.addMouseListener(this); //加入mouse監(jiān)聽

... }

public

voidmouseClicked(MouseEvente){ //鼠標單擊事件

intc=e.getButton(); //得到按下的鼠標鍵

StringmouseInfo=null;

if(c==MouseEvent.BUTTON1){ mouseInfo="左鍵"; }else

if(c==MouseEvent.BUTTON3){ mouseInfo="右鍵"; }else{ mouseInfo="滾軸"; }text.append("鼠標單擊:"+mouseInfo+"。\n"); }

public

voidmouseEntered(MouseEvente){ //鼠標進入組件

text.append("鼠標進入組件。\n"); }

public

voidmouseExited(MouseEvente){ //鼠標退出組件

text.append("鼠標離開組件。\n"); }

public

voidmousePressed(MouseEvente){ //鼠標按下

text.append("鼠標按下。\n"); }

public

voidmouseReleased(MouseEvente){ //鼠標松開

text.append("鼠標松開。\n"); }通過MouseAdapter實現對指定鼠標操作監(jiān)聽classMyMouseHandleextendsJFrame{ //此類定義時直接繼承了JFrame類

privateJTextAreatext=newJTextArea();

publicMyMouseHandle(){

super.setTitle("WelcomeToMLDN"); JScrollPanescr=newJScrollPane(text); //加入滾動條

scr.setBounds(5,5,300,200);

super.add(scr); //在窗體加入組件

text.addMouseListener(newMouseAdapter(){

public

voidmouseClicked(MouseEvente){//鼠標單擊事件

intc=e.getButton(); //得到按下的鼠標鍵

StringmouseInfo=null;

if(c==MouseEvent.BUTTON1){ mouseInfo="左鍵"; }else

if(c==MouseEvent.BUTTON3){ mouseInfo="右鍵"; }else{ mouseInfo="滾軸"; }

text.append("鼠標單擊:"+mouseInfo+"。\n"); }}); //加入mouse監(jiān)聽

... }}鼠標拖拽事件及監(jiān)聽處理在一般的圖形界面中經??梢钥吹绞髽送献Р僮鞯那闆r,在Swing的事件處理中可以使用MouseMotionListener接口可以完成鼠標的拖拽操作No.方法類型描述1voidmouseDragged(MouseEvent

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論