版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
掌握常用事件和方法按鈕、文本框窗口事件鼠標(biāo)事件鍵盤事件補(bǔ)充:對(duì)話框主要內(nèi)容10.6
開(kāi)發(fā)步驟java界面應(yīng)用程序的開(kāi)發(fā)步驟:創(chuàng)建界面,設(shè)置布局,添加控件實(shí)現(xiàn)監(jiān)視器(或者叫監(jiān)聽(tīng)器)類實(shí)現(xiàn)某個(gè)監(jiān)視接口,監(jiān)視器類提供的信息包括監(jiān)聽(tīng)的事件類型以及響應(yīng)動(dòng)作為控件注冊(cè)監(jiān)視器實(shí)現(xiàn)控件對(duì)象和監(jiān)視器對(duì)象關(guān)聯(lián)10.6
事件、事件源和事件監(jiān)聽(tīng)器事件、事件源和事件監(jiān)聽(tīng)器事件是由事件源產(chǎn)生的,事件的產(chǎn)生者稱為事件源。例如,在Button組件上點(diǎn)擊鼠標(biāo)會(huì)產(chǎn)生以這個(gè)Button為源的一個(gè)事件:ActionEvente事件監(jiān)聽(tīng)器是一個(gè)類的實(shí)例,這個(gè)類實(shí)現(xiàn)了一個(gè)特殊的接口,稱為L(zhǎng)intenerinterface。當(dāng)事件源產(chǎn)生了一個(gè)事件以后,事件源就會(huì)發(fā)送通知給相應(yīng)的事件監(jiān)聽(tīng)器,監(jiān)聽(tīng)器對(duì)象根據(jù)事件對(duì)象內(nèi)封裝的信息,決定如何響應(yīng)這個(gè)事件10.6
事件處理模型10.7按鈕、菜單、文本框事件5文本框(輸入字符)+回車按鈕 點(diǎn)擊菜單項(xiàng) 點(diǎn)擊ActionEvent事件ActionListener接口{actionPerformed(ActionEvent)}MyActionListener類{actionPerformed(ActionEvent)}處理實(shí)現(xiàn)注冊(cè)myButton.addActionListener(newMyActionListener());10.7實(shí)現(xiàn)監(jiān)聽(tīng)接口的三種實(shí)現(xiàn)方式MyActionListener的實(shí)現(xiàn)方式在MyJFrame類體外實(shí)現(xiàn)P217,例10.4在MyJFrame類體內(nèi),通過(guò)內(nèi)部類實(shí)現(xiàn)P220,例10.6在MyJFrame類體內(nèi),通過(guò)匿名類實(shí)現(xiàn)(P139,匿名類)P220,例10.66text3.addActionListener(
new
ActionListener(){ publicvoidactionPerformed(ActionEvente){ …..//本次事件處理的方法體
} });回顧:該匿名類會(huì)生成一個(gè)類,該類實(shí)現(xiàn)了ActionListener接口,重寫了接口內(nèi)的所有方法,并且生成一個(gè)匿名類的對(duì)象作為本次注冊(cè)的監(jiān)聽(tīng)器參數(shù)(對(duì)象)思考:為什么使用new和分號(hào)?10.7.1
按鈕事件按鈕(JButton對(duì)象)發(fā)生ActionEvent事件增加對(duì)按鈕的事件處理函數(shù)(監(jiān)聽(tīng)器監(jiān)聽(tīng)ActionEvent事件)button.addActionListener(實(shí)現(xiàn)ActionListener接口的對(duì)象);ActionEvent()類使用的主要兩個(gè)方法(1)getSourse()方法:用來(lái)獲得引發(fā)事件的對(duì)象名(2)getActionCommand()方法:用來(lái)獲得引發(fā)事件動(dòng)作的命令名按鈕事件_例1publicclassEventDemoextendsJFrame{ JButtonjb=newJButton("鳴槍");JPaneljpanel=newJPanel();publicEventDemo(){ this.add(jpanel); jpanel.add(jb); //myEvente=newmyEvent(); jb.addActionListener(newmyEvent()); this.setSize(200,200); this.setVisible(true); } publicstaticvoidmain(Stringargs[]){ newEventDemo();}}classmyEventimplementsActionListener{ publicvoidactionPerformed(ActionEventarg0){ JOptionPanejo=newJOptionPane(); jo.showConfirmDialog(null,"標(biāo)題",
"內(nèi)容",-1); System.out.println("一個(gè)健步跨出去了"); }}按鈕事件_例2publicclassEventDemoextendsJFrameimplementsActionListener{ JButtonjb=newJButton("+"); JTextFieldt3=newJTextField(10); JTextFieldt2=newJTextField(10);JTextFieldt1=newJTextField(10); JPaneljpanel=newJPanel(); publicEventDemo(){ this.add(jpanel); jpanel.add(jb);jpanel.add(t1);jpanel.add(t2);jpanel.add(t3); jb.addActionListener((ActionListener)this);//使用當(dāng)前窗口做監(jiān)視器(事件源所在的類的實(shí)例) this.setSize(200,200); this.setVisible(true); } publicvoidactionPerformed(ActionEventarg0){ t3.setText(t2.getText()+t1.getText()); } publicstaticvoidmain(Stringargs[]){ newEventDemo(); }}按鈕事件_例3publicclassEventDemoextendsJFrameimplementsActionListener{ JTextFieldt3; JTextFieldt2;JTextFieldt1; JButtonjb1=newJButton(“+"); JButtonjb2=newJButton(“-"); JButtonjb3=newJButton(“*"); JButtonjb4=newJButton(“/"); JPaneljpanel=newJPanel();publicEventDemo(){ this.add(jpanel); jpanel.add(t1);jpanel.add(t2);jpanel.add(t3); jpanel.add(jb1);jpanel.add(jb2);jpanel.add(jb3);jpanel.add(jb4); jb1.addActionListener(this);jb2.addActionListener(this);jb3.addActionListener(this);jb4.addActionListener(this); this.setSize(200,200); this.setVisible(true); } publicvoidactionPerformed(ActionEventarg0){ doublea=Integer.parseInt(t1.getText()); doubleb=Integer.parseInt(t2.getText());
if(arg0.getActionCommand().equals(“+")){ t3.setText(String.valueOf(a+b));//String.valueOf(a)是由a生成一個(gè)字符值和a相同的String對(duì)象
} } publicstaticvoidmain(Stringargs[]){ newEventDemo(); }}按鈕事件_說(shuō)明publicvoidactionPerformed(ActionEventarg0){ doublea=Integer.parseInt(t1.getText()); doubleb=Integer.parseInt(t2.getText());
//arg0.getActionCommand()獲取組件的標(biāo)簽名字符文字
if(arg0.getActionCommand().equals("+")){ t3.setText(String.valueOf(a+b)); }
//arg0.getSource()獲取組件對(duì)象
if(arg0.getSource().equals(button))
{ t3.setText(String.valueOf(a+b)); } }10.7.2
菜單事件菜單項(xiàng)(JMenuItem對(duì)象)也可以發(fā)生ActionEvent事件增加菜單欄、增加菜單、增加菜單項(xiàng)menuBar.add(menu);menu.add(menuItem);增加對(duì)菜單的事件處理函數(shù)(監(jiān)聽(tīng)器監(jiān)聽(tīng)ActionEvent事件)menuItem.addActionListener(實(shí)現(xiàn)ActionListener接口的對(duì)象);10.8窗口事件JFrame對(duì)象是窗口事件(WindowEvent)的事件源,我們要指定一個(gè)監(jiān)聽(tīng)器對(duì)象:MyWindowListenerlistener=...;frame.addWindowListener(listener);
監(jiān)聽(tīng)器對(duì)象要實(shí)現(xiàn)WindowListener接口。WindowListener接口中共有七個(gè)方法,它們分別對(duì)應(yīng)七個(gè)窗口事件:publicinterfaceWindowListener{ voidwindowOpened(WindowEvente); voidwindowClosing(WindowEvente); voidwindowClosed(WindowEvente); voidwindowIconified(WindowEvente); voidwindowDeiconified(WindowEvente); voidwindowActivated(WindowEvente); voidwindowDeactivated(WindowEvente);}
10.8窗口事件WindowListener接口實(shí)現(xiàn)方法一:定義一個(gè)類來(lái)實(shí)現(xiàn)WindowListener接口,在感興趣的方法中添加我們需要的代碼,然后讓其他方法為空即可。classQuitWindowimplementsWindowListener{publicvoidwindowClosing(WindowEvente){ System.exit(0);}voidwindowOpened(WindowEvente){}voidwindowClosed(WindowEvente){}voidwindowIconified(WindowEvente){}voidwindowDeiconified(WindowEvente){}voidwindowActivated(WindowEvente){}voidwindowDeactivated(WindowEvente){}}1410.8
窗口事件WindowListener接口實(shí)現(xiàn)方法二:Java為每個(gè)具有多個(gè)方法的AWT監(jiān)聽(tīng)器接口提供了一個(gè)適配器類。與WindowListener接口對(duì)應(yīng)的WindowAdapter類實(shí)現(xiàn)了以上七個(gè)空方法,我們只需要通過(guò)擴(kuò)展適配器類來(lái)實(shí)現(xiàn)我們感興趣的方法classQuitWindowextendsWindowAdapter{PublicvoidwindowClosing(WindowEvente){ System.exit(0); }}1510.9
鼠標(biāo)事件MouseListener接口處理的鼠標(biāo)事件:mouseClicked(MouseEvent
e)鼠標(biāo)按鍵在組件上單擊(按下并釋放)時(shí)調(diào)用mouseEntered(MouseEvent
e)
鼠標(biāo)進(jìn)入到組件上時(shí)調(diào)用mouseExited(MouseEvent
e)
鼠標(biāo)離開(kāi)組件時(shí)調(diào)用mousePressed(MouseEvent
e)
鼠標(biāo)按鍵在組件上按下時(shí)調(diào)用mouseReleased(MouseEvent
e)
鼠標(biāo)按鈕在組件上釋放時(shí)調(diào)用10.9
鼠標(biāo)事件MouseMotionListener接口處理的鼠標(biāo)事件:mouseDragged(MouseEvent)
鼠標(biāo)拖動(dòng)觸發(fā)的事件mouseMoved(MouseEvent)
鼠標(biāo)移動(dòng)觸發(fā)的事件鼠標(biāo)事件案例importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;
public
class
MouseTest
extendsJFrameimplementsMouseListener,MouseMotionListener{//定義組件,命名,初始化;…..}
public
voidmouseClicked(MouseEventme){}
public
voidmousePressed(MouseEventme){txtStatus.setText("按下");}
public
voidmouseEntered(MouseEventme){txtStatus.setText("移入");}
public
voidmouseExited(MouseEventme){txtStatus.setText("移出");}public
voidmouseReleased(MouseEventme){txtStatus.setText("釋放");}
public
voidmouseMoved(MouseEventme){intX=me.getX();intY=me.getY();txtX.setText(String.valueOf(intX));txtY.setText(String.valueOf(intY));}
public
voidmouseDragged(MouseEventme){}
public
static
voidmain(String[]args){MouseTestmed=newMouseTest();
}}10.10
焦點(diǎn)事件如果某個(gè)組件能夠接收用戶按鍵,那么該組件就擁有焦點(diǎn)。擁有焦點(diǎn)的組件在顯示形式上與其他組件有一些差別:文本域內(nèi)會(huì)顯示光標(biāo);按鈕四周會(huì)顯示一個(gè)由虛線組成的矩形框焦點(diǎn)事件:FocusEventeFocusListener接口focusGained(FocusEvente)組件獲得焦點(diǎn)時(shí)調(diào)用focusLost(FocusEvente)組件失去焦點(diǎn)時(shí)調(diào)用注意:組件的焦點(diǎn)發(fā)生變化時(shí),監(jiān)視器便調(diào)用以上的方法10.11
鍵盤事件當(dāng)一個(gè)組件處于激活狀態(tài),如果按下、釋放或敲擊鍵盤上的一個(gè)鍵的時(shí)候,這個(gè)組件就觸發(fā)了鍵盤事件KeyListener接口中有三個(gè)方法:publicvoidkeyPressed(KeyEvent
e)publicvoidkeyReleased(KeyEvent
e)publicvoidkeyTyped(KeyEvent
e)KeyEvent類的常用方法:getKeyCode()返回鍵碼值getKeyChar()返回字符getModifiers()處理復(fù)合鍵情況例KeyEvent_Example.java10.12
Swing界面開(kāi)發(fā)通過(guò)GUI技術(shù)開(kāi)發(fā)的有點(diǎn):開(kāi)發(fā)周期短界面提示接口和控件信息,開(kāi)發(fā)過(guò)程直觀明了Swing界面的控件添加和事件處理SWT界面的控件添加和事件處理要實(shí)現(xiàn)以上技術(shù),需要下載一些eclipse組件,如SWT_Designer,本實(shí)驗(yàn)所使用的eclipse為綠色版,已經(jīng)手動(dòng)添加過(guò)SWT_Designer,如果在自己原有的eclipse上添加該軟件,請(qǐng)參考“SWT圖形用戶界面”2110.12Swing界面開(kāi)發(fā)例實(shí)現(xiàn)按鈕、文本框和菜單的ActionEvent事件處理、窗口事件處理、鼠標(biāo)事件處理和鍵盤事件處理1、在所選的項(xiàng)目上“右鍵,新建,其它”2、依次選擇“Designer,Swing,JFrame”3、設(shè)置窗口的各種參數(shù),包括布局管理器、title和其它屬性4、將需要的組件拖入窗口5、設(shè)置各個(gè)組件的消息處理6、右鍵單擊設(shè)置各種處理事件(Key、Mouse等)2223事件處理總結(jié)Event-事件EventSource-事件源Eventhandler-事件處理者事件發(fā)生的場(chǎng)所,通常就是各個(gè)組件,例如按鈕Button接收事件并對(duì)其進(jìn)行處理的對(duì)象事件補(bǔ)充內(nèi)容:對(duì)話框在Windows平臺(tái)下用MessageBox來(lái)實(shí)現(xiàn)和用戶的交互功能,在JAVA中也有同樣的類來(lái)實(shí)現(xiàn)這樣的功能,利用Swing中提供的JOptionPane類。四個(gè)標(biāo)準(zhǔn)對(duì)話框如下:MessageDialog(消息對(duì)話框) 用來(lái)顯示信息給用戶。ConfirmDialog(確認(rèn)對(duì)話框) 提出問(wèn)題,然后由用戶自己來(lái) 確認(rèn)(按"Yes"或"No"按鈕)InputDialog(輸入對(duì)話框) 提示輸入文本。OptionDialog(選項(xiàng)對(duì)話框) 組合其它三個(gè)對(duì)話框類型。消息對(duì)話框消息對(duì)話框是一個(gè)簡(jiǎn)單的顯示消息的窗口,只是給用戶提供提示信息。如圖所示消息對(duì)話框:消息對(duì)話框可以通過(guò)調(diào)用JOptionPane類的showMessageDialog(Compont,Object)方法來(lái)創(chuàng)建,參數(shù)是父組件和字符串(或者組件、顯示的圖標(biāo))。如以下語(yǔ)句創(chuàng)建一個(gè)顯示簡(jiǎn)單字符的消息對(duì)話框:
JOptionPane.showMessagDialog(null,”WelcomeToQinghuaIT…”);還可以使用showMessageDialog(Component,Object,String,int)方法來(lái)創(chuàng)建一個(gè)顯示警告消息的對(duì)話框,可以自己設(shè)置想要顯示的消息對(duì)話框的標(biāo)題。用法同showInputDialog()方法,參數(shù)相同但無(wú)返回值。如以下語(yǔ)句創(chuàng)建一個(gè)消息輸入對(duì)話框:
JOptionPane.showMessagDialog(null,”文件被刪除”,”刪除警告”,JOptionPane.WARNING_MESSAGE);確認(rèn)對(duì)話框創(chuàng)建確認(rèn)對(duì)話框的最簡(jiǎn)單方法就是調(diào)用showConfirmDialog(Component,Object)方法,參數(shù)意義同消息對(duì)話框中的參數(shù)相同。 不同的是該方法返回一個(gè)整數(shù),JOptionPane的三個(gè)屬性:YES_OPTIONNO_OPTIONCANCEL_OPTION示例
importjava.awt.*; importjavax.swing.*; importjava.awt.event.*; importjava.util.EventListener; publicclassMessageDialogAppextendsJFrameimplementsActionListener{ JButtonbutton1=newJButton("顯示消息對(duì)話框一"); JButtonbutton2=newJButton("顯示消息對(duì)話框二"); publicMessageDialogApp(){ super("MessageDialog示例"); this.setLayout(newFlowLayout()); button1.addActionListener(this);
button2.addActionListener(this); this.add(button1); this.add(button2); this.setSize(180,160); this.show(); } publicstaticvoidmain(Stringargs[]){ newMessageDialogApp(); } publicvoidactionPerformed(ActionEvente){ if(e.getSource()==button1){ JOptionPane.showMessageDialog(null,"WelcomeToQinghuaIT..."); } if(e.getSource()==button2){ JOptionPane.showMessageDialog(null,"出現(xiàn)錯(cuò)誤", "錯(cuò)誤警告",JOptionPane.WARNING_MESSAGE); } } }輸入對(duì)話框輸入對(duì)話框提出一個(gè)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2022年中考化學(xué)模擬卷1(廣東專用)
- 2024影視制作公司與演員藝人演藝經(jīng)紀(jì)合同
- 2024智能鎖安裝調(diào)試與售后服務(wù)合同模板3篇
- 二零二五年度中小企業(yè)貸款合同融資渠道創(chuàng)新3篇
- 二零二五年度光伏發(fā)電電力承包工程合同范本2篇
- 二零二五年度ktv酒水促銷員專項(xiàng)培訓(xùn)與績(jī)效評(píng)估合同3篇
- 安徽省二診數(shù)學(xué)試卷
- 二零二五年度人才培訓(xùn)合作協(xié)議2篇
- 2025阿拉爾經(jīng)濟(jì)技術(shù)開(kāi)發(fā)區(qū)文化創(chuàng)意產(chǎn)品研發(fā)與生產(chǎn)合同
- 安徽高中期末數(shù)學(xué)試卷
- GB/T 1094.7-2024電力變壓器第7部分:油浸式電力變壓器負(fù)載導(dǎo)則
- 人教版一年級(jí)數(shù)學(xué)上冊(cè)期末無(wú)紙筆考試試卷(A卷)【含答案】
- 2,3-二甲苯酚的理化性質(zhì)及危險(xiǎn)特性表
- 申報(bào)職稱:副教授演示課件
- 型濾池計(jì)算說(shuō)明書(shū)
- 格力離心機(jī)技術(shù)服務(wù)手冊(cè)
- 水泥攪拌樁計(jì)算(完美)
- 旭化成離子交換膜的介紹
- JJRB輕鋼龍骨隔墻施工方案要點(diǎn)
- 石油石化用化學(xué)劑產(chǎn)品質(zhì)量認(rèn)可實(shí)施細(xì)則
- 快遞證明模板
評(píng)論
0/150
提交評(píng)論