版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
JAVA應用開發(fā)詳解第18章:圖形界面
——事件處理MLDN軟件教學研發(fā)部本章目標了解事件的概念了解事件的監(jiān)聽及處理了解常用事件掌握適配器設計模式在事件監(jiān)聽中的應用事件和監(jiān)聽器每當一個按鈕按下時,實際上按鈕的狀態(tài)就發(fā)生了改變,那么此時就會產(chǎn)生一個事件,而如果要想處理此事件,則就需要事件的監(jiān)聽者不斷的監(jiān)聽事件的變化,并根據(jù)這些事件進行相應的處理。在Swing編程中,依然使用了最早AWT的事件處理方式,所有的事件類(基本上任意的一個組件都有對應的事件)都是EventObject類的子類EventObject類public
classEventObjectextendsObject
implementsSerializable{
publicEventObject(Objectsource){ //構(gòu)造一個發(fā)生事件的對象
}
publicObjectgetSource(){ //返回一個事件對象
}
publicStringtoString(){ //得到信息
}}Java事件處理流程窗體事件WindowListener是專門處理窗體的事件監(jiān)聽接口,一個窗體的所有變化,例如:窗口打開、關(guān)閉等都可以使用這個接口進行監(jiān)聽。No.方法類型描述1voidwindowActivated(WindowEvente)普通將窗口變?yōu)榛顒哟翱跁r觸發(fā)2voidwindowDeactivated(WindowEvente)普通將窗口變?yōu)椴换顒哟翱跁r觸發(fā)3voidwindowClosed(WindowEvente)普通當窗口被關(guān)閉時觸發(fā)4voidwindowClosing(WindowEvente)普通當窗口正在關(guān)閉時觸發(fā)5voidwindowIconified(WindowEvente)普通窗口最小化時觸發(fā)6voidwindowDeiconified(WindowEvente)普通窗口從最小化恢復到正常狀態(tài)時觸發(fā)7voidwindowOpened(WindowEvente)普通窗口打開時觸發(fā)實現(xiàn)WindowListenerpublic
classMyWindowEventHandleimplementsWindowListener{//實現(xiàn)窗口監(jiān)聽
public
voidwindowActivated(WindowEventarg0){ //設置為活動窗口時觸發(fā)
System.out.println("windowActivated-->窗口被選中。"); }
public
voidwindowClosed(WindowEventarg0){ //窗口被關(guān)閉窗口時觸發(fā)
System.out.println("windowClosed-->窗口被關(guān)閉。"); }
public
voidwindowClosing(WindowEventarg0){ //窗口關(guān)閉時觸發(fā),按下關(guān)閉按鈕
System.out.println("windowClosing-->窗口關(guān)閉。"); 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)聽器就可以根據(jù)事件進行處理
frame.addWindowListener(newMyWindowEventHandle()); frame.setSize(300,160); //設置組件大小
frame.setBackground(Color.WHITE); //設置窗體的背景顏色
frame.setLocation(300,200); //設置窗體的顯示位置
frame.setVisible(true); //讓組件顯示
}}監(jiān)聽適配器在整個事件處理中提供了很多的Adapter(適配器)類,方便用戶進行事件處理的實現(xiàn),以WindowAdapter為例,用戶只要繼承了此類,就可以根據(jù)自己的需要覆寫方法,如果現(xiàn)在只需要關(guān)心窗口關(guān)閉方法,則只在子類中覆寫windowClosing()方法即可。通過WindowAdapter實現(xiàn)監(jiān)聽packageorg.lxh.demo18.windoweventdemo;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;public
classMyWindowAdapterEventHandle
extendsWindowAdapter{ //實現(xiàn)適配器類
//此時,可以根據(jù)自己的需要覆寫方法,此類只覆寫windowClosing()方法
public
voidwindowClosing(WindowEventarg0){ //窗口關(guān)閉時觸發(fā),按下關(guān)閉按鈕
System.out.println("windowClosing-->窗口關(guān)閉。"); System.exit(1); //系統(tǒng)退出
}}使用匿名內(nèi)部類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(){ //覆寫窗口關(guān)閉的方法
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ā)生操作時調(diào)用使用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(){ //采用匿名內(nèi)部類
public
voidactionPerformed(ActionEventarg0){
if(arg0.getSource()==but){//判斷觸發(fā)源是否是按鈕
lab.setText(text.getText()); //將文本文字設置到標簽
} } }); //此處加入動作監(jiān)聽
frame.addWindowListener(newWindowAdapter(){ //加入窗口監(jiān)聽,覆寫窗口關(guān)閉的方法
public
voidwindowClosing(WindowEventarg0){ System.exit(1); //系統(tǒng)退出
} });
。。。
}}改進登陸程序如果用戶輸入的用戶名為:“l(fā)ixinghua”,密碼為“mldn”,則認為是合法用戶,提示登陸成功的信息,反之則提示登陸失敗的信息,操作代碼如下所示。鍵盤事件及監(jiān)聽處理在Swing的事件處理中也可以對鍵盤的操作進行監(jiān)聽,直接使用KeyListener接口即可。此接口定義了如下的方法。如果要想取得鍵盤鍵入的內(nèi)容,則可以通過KeyEvent取得,此類的常用方法如下所示。No.方法類型描述1voidkeyTyped(KeyEvente)普通鍵入某個鍵時調(diào)用2voidkeyPressed(KeyEvente)普通鍵盤按下時調(diào)用3voidkeyReleased(KeyEvente)普通鍵盤松開時調(diào)用No.方法類型描述1publicchargetKeyChar()普通返回鍵入的字符,只針對于keyTyped有意義2publicintgetKeyCode()普通返回鍵入字符的鍵碼3publicstaticStringgetKeyText(intkeyCode)普通返回此鍵的信息,如:“HOME”、“F1”或“A”等實現(xiàn)鍵盤監(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)聽,覆寫窗口關(guā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){ //鍵入內(nèi)容
text.append("輸入的內(nèi)容是:"+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){ //鍵入內(nèi)容
text.append("輸入的內(nèi)容是:"+e.getKeyChar()+"\n"); } }); //加入key監(jiān)聽
super.setSize(310,210); //設置窗體大小
super.setVisible(true); //顯示窗體
super.addWindowListener(newWindowAdapter(){//加入事件監(jiān)聽
//覆寫窗口關(guān)閉方法
public
voidwindowClosing(WindowEventarg0){ System.exit(1); //系統(tǒng)退出
} }); }}鼠標事件及監(jiān)聽處理如果想對一個鼠標的操作進行監(jiān)聽,例如,鼠標按下、松開等,則可以實現(xiàn)MouseListener接口No.方法類型描述1voidmouseClicked(MouseEvente)普通鼠標單擊時調(diào)用(按下并釋放)2voidmousePressed(MouseEvente)普通鼠標按下時調(diào)用3voidmouseReleased(MouseEvente)普通鼠標松開時調(diào)用4voidmouseEntered(MouseEvente)普通鼠標進入到組件時調(diào)用5voidmouseExited(MouseEvente)普通鼠標離開組件時調(diào)用MouseEvent在每個事件觸發(fā)后都會產(chǎn)生MouseEvent事件,此事件可以得到鼠標的相關(guān)操作No.方法及常量類型描述1publicstaticfinalintBUTTON1常量表示鼠標左鍵的常量2publicstaticfinalintBUTTON2常量表示鼠標滾軸的常量3publicstaticfinalintBUTTON3常量表示鼠標右鍵的常量4publicintgetButton()普通以數(shù)字形式返回按下的鼠標鍵5publicintgetClickCount()普通返回鼠標的單擊次數(shù)6publicstaticStringgetMouseModifiersText(intmodifiers)普通以字符串形式返回鼠標按下的鍵信息7publicintgetX()普通返回鼠標操作的X坐標8publicintgetY()普通返回鼠標操作的Y坐標實現(xiàn)鼠標監(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實現(xiàn)對指定鼠標操作監(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)聽處理在一般的圖形界面中經(jīng)??梢钥吹绞髽送献Р僮鞯那闆r,在Swing的事件處理中可以使用MouseMotionListener接口可以完成鼠標的拖拽操作No.方法類型描述1voidmouseDragged(MouseEvent
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高一英語上冊月考試題及答案
- 通信行業(yè)售后網(wǎng)絡工程師面試題集
- 新員工考試題庫及答案
- 質(zhì)量控制經(jīng)理的面試題集
- 廚師證考試中西餐烹飪理論實操全攻略含答案
- 2025年數(shù)字圖書館建設可行性研究報告
- 2025年家庭園藝智能系統(tǒng)項目可行性研究報告
- 2025年城市固體廢棄物處理與資源化項目可行性研究報告
- 2025年健康養(yǎng)老產(chǎn)業(yè)園開發(fā)項目可行性研究報告
- 2025年個性化健康管理APP開發(fā)項目可行性研究報告
- 2025年《肌肉骨骼康復學》期末考試復習參考題庫(含答案)
- 國企合作加盟合同范本
- 2025年企業(yè)員工激勵機制管理模式創(chuàng)新研究報告
- 工程勘察設計收費標準
- 2025年中國工業(yè)級小蘇打行業(yè)市場分析及投資價值評估前景預測報告
- 家具生產(chǎn)工藝流程標準手冊
- 消防新隊員安全培訓課件
- 2025瑪納斯縣司法局招聘編制外專職人民調(diào)解員人筆試備考題庫及答案解析
- 德邦物流系統(tǒng)講解
- 初中歷史時間軸(中外對照橫向版)
- DB3205∕T 1139-2024 巡游出租汽車營運管理規(guī)范
評論
0/150
提交評論